Java 陷入递归-找到最低的差异

Java 陷入递归-找到最低的差异,java,recursion,Java,Recursion,我做了以下练习: 给定一个整数数组,递归返回数组中两组不同数字之间的最小绝对差值。 例如:如果你有以下数组:{5,4,2},最小的差异是1,因为如果你把它分成两组:{5},{4,2},你会得到:Math.abs(5-6)=1。 另一个例子:如果你有以下数组:{4,3,2,1},最小的差异是0,因为如果你把它分成两组:{4,1},{3,2},你会得到:Math.abs(5-5)=0。 这只能在递归中进行,您可以创建任意多的方法。 方法签名为: 公共静态int-minDiff(int[]arr) 我

我做了以下练习: 给定一个整数数组,递归返回数组中两组不同数字之间的最小绝对差值。 例如:如果你有以下数组:{5,4,2},最小的差异是1,因为如果你把它分成两组:{5},{4,2},你会得到:Math.abs(5-6)=1。 另一个例子:如果你有以下数组:{4,3,2,1},最小的差异是0,因为如果你把它分成两组:{4,1},{3,2},你会得到:Math.abs(5-5)=0。 这只能在递归中进行,您可以创建任意多的方法。 方法签名为: 公共静态int-minDiff(int[]arr)

我得到的是:

public static int minDiff(int[] arr){
    return minDiff(arr,0,0,0,arr[0]);
}
private static int minDiff(int[] arr,int index,int groupa, int groupb, int diff){
    if(index>=arr.length || arr.length-1-index<0 || (index==arr.length-1-index) ) return diff;
    int dif1=minDiff(arr,index+1,groupa+arr[index], groupb, diff);
    int dif2=minDiff(arr,index+1,groupa, groupb+arr[index], diff);
    if(Math.abs(dif1-dif2)<diff){
        diff=Math.abs(dif1-dif2);
    }
    return diff;

}
publicstaticintmindiff(int[]arr){
返回minDiff(arr,0,0,0,arr[0]);
}
私有静态int-minDiff(int[]arr,int-index,int-groupa,int-groupb,int-diff){

如果(index>=arr.length | | arr.length-1-index请查看此代码段

public static void main(String[] args)
{
    System.out.println(minDiff(new int[] { 5, 2, 4 })); // 1
    System.out.println(minDiff(new int[] { 5, 4, 2 })); // 1
    System.out.println(minDiff(new int[] { 1, 2, 7, 17, 6 })); // 1
    System.out.println(minDiff(new int[] { 4, 3, 2, 1 })); // 0

}

public static int minDiff(int[] arr)
{
    return minDiff(arr, 0, 0, 0);
}

private static int minDiff(int[] arr, int sumGroupA, int sumGroupB, int i)
{
    if (i == arr.length) // in case we are out of boundaries return the absolute value between the two groups
        return Math.abs(sumGroupA - sumGroupB);

    int r1 = minDiff(arr, sumGroupA + arr[i], sumGroupB, i + 1); // add to group 1
    int r2 = minDiff(arr, sumGroupA, sumGroupB + arr[i], i + 1); // add to group 2 instead

    return Math.min(r1, r2);
}

问题是什么?我做错了什么…发生了什么?你期望发生什么?你必须把整个数组分成两组吗?例如{5,6,10,14}可以产生(5-6)=1。另外,数字必须相邻才能被视为一个组吗{5,10,6}可以产生{5+6}和{10}来产生(11-10)=1?@shockawave123不,它们不必相邻,但您必须使用数组中的所有数字,因此数组中的每个数字都必须用于计算,并且只能在某个组中出现一次(不能同时出现在这两个数字中)