递归缺失值无法找出如何修复测试仪

时间:2019-01-06 09:25:01

标签: java recursion

该函数应采用2个参数:n数组中整数的数量和max,它是数组中整数的最大值(默认值为1)。此函数返回数组可能的选项数量。

例如,当n = 3且max = 2时

  1. {1, 1, 1}  2. {1, 1, 2} 3. {1, 2, 2} 4. {2, 2, 2}
    

并且当max = 3且n = 2时

  1. {1, 1} 2. {1, 2} 3. {1, 3} 4. {2, 2} 5. {2, 3} 6. {3, 3}
    

这是我的代码:

public class Ex14 {
    public static int howManySorted(int n, int max) {
        int[] myIntArray = new int[n];
        fillAnArray(myIntArray, 0);
        return howManySorted(myIntArray, max, 0, 1);
    }

    private static int howManySorted(int[] myIntArray, int max, int i, int way) {
        way++;
        myIntArray[i]++;
        if (i < myIntArray.length - 1)
            if (myIntArray[i] == max)
                i++;
        if (myIntArray[myIntArray.length - 1] == max) return way;


        return (howManySorted(myIntArray, max, i, way));
    }

    //filling the array with ones for defualt way when all values equals 1
    private static void fillAnArray(int[] myIntArray, int t) {
        if (t == myIntArray.length)
            return;
        else 
            myIntArray[t] = 1;
        fillAnArray(myIntArray, t + 1);
    }
}

如果在第二个示例中使用第一个示例,它跳过一个数组,则我的代码似乎给我正确的值4。 测试人员:

public class Tester14 {
    public static void main() {
        System.out.println("Test: Checking method 'howManySorted' on n=3 and max=2");
        System.out.println("Expected result = 4, Student result = "
            + Ex14.howManySorted(2, 3) + "\n");
    }
}

1 个答案:

答案 0 :(得分:0)

您的代码有问题 您首先递增每个单元格直到最大值 然后当您达到最大值时,您将移至数组的下一个单元格 max > 2的每个示例都是这样 当两个单元格都需要增加时想要返回值 例如在第二项测试中,您错过了{2,2}

您的步骤是:

  • {1,1}
  • {2,1}
  • {3,1}
  • {3,2}
  • {3,3}