Can you quickly tell me if this pseudocode makes sense or not?

北城余情 提交于 2020-01-11 14:45:07

问题


I believe my code is now foolproof. I will write up the pseudocode now. But I do have one question. Why does DRJava ask that I return something outside of my if statements? As you can see I wrote for ex: "return 1;" just because it asked. It will never return that value however. Can someone explain this to me?

public class assignment1question2test {
  public static void main(String[] args) {

    int[] a = new int[50];
    int l = 0;
    int r = a.length;

    for(int i=0; i<r; i++) {
      a[i] = 1;
    }

    a[0] = 10;

    for (int i=0; i<r; i++) { 
      System.out.println(a[i]);
    }

    System.out.print(recursiveSearch(a,l,r));

  }

  public static int recursiveSearch (int[] a, int l, int r) {

    int third1 = (r-l)/3 + l;
    int third2 = third1*2 - l + 1;

      System.out.println("i will be checking compare from " + l + " to " + third1 + " and " + (third1 + 1) + " to " + third2);
      int compareResult = compare(a,l,third1,third1 + 1, third2);

      if(r-l == 1) {
      if (compareResult == 1) {
        return l;
      }
      else {
        return r;
      }
      }

      if (compareResult == 0) {
        return recursiveSearch(a,third2 + 1, r);
      }
      if (compareResult == 1) {
        return recursiveSearch(a,l,third1);
      }
      if (compareResult == -1) {
        return recursiveSearch(a,third1 + 1, third2);
      }
      return 1;

  }
  public static int compare(int[] a, int i, int j, int k, int l) {

    int count1 = 0;
    int count2 = 0;

    for(int g=i; g<=j; g++) {
      count1 = count1 + a[g];
    }

    for(int g=k; g<=l; g++) {
      count2 = count2 + a[g];
    }

        if (count1 == count2) {
          return 0;
        }
        if (count1 > count2) {
          return 1;
        }
        if (count1 < count2) {
          return -1;
        }  

        return 0;
}
}

UPDATED FINAL PSEUDOCODE:

Algorithm: recursiveSearch (a,l,r)
Inputs: An array a, indices l and r which delimit the part of interest.
Output: The index that has the lead coin.
int third1 ← (r - l + 1)/3
int third2 ← third1*2 - l + 1
if (r-l = 0) then
    return l
int compareResult  ← compare(a,l,third1,third1 + 1,third2)
if (r-l  = 1) then
    if (compareResult = 1) then
        return l
    else 
        return r
if (compareResult = 0) then
    return recursiveSearch(a, third2 + 1, r)
if (compareResult = "1") then
    return recursiveSearch(a,l,third1)
if (compareResult = "-1") then
    return recursiveSearch(a,third1 + 1,third2)

回答1:


You seem to be including mid in the following search regardless of which side is larger. The recursive calls should both exclude mid from their search space.

Also, for the comparison to be meaningful, the two groups being compared need to be of equal size. That will require some extra odd/even logic.



来源:https://stackoverflow.com/questions/21420029/can-you-quickly-tell-me-if-this-pseudocode-makes-sense-or-not

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!