如何使用递归检查数组中的所有值是否相等?

时间:2015-06-09 16:06:02

标签: java arrays optimization recursion

我试图递归地解决这个算法;我想检查数组中的所有值是否相同(或彼此相等)。如果所有值都相等,则返回true,如果不相等,则返回false。我的代码没有通过任何测试。

public boolean allEqual(int[] a, int start, int end){
    if (start > end) return false;
    if (a.length==0) return false;
    if (start==end && a[start] == a[end]) return true;
    if (a[start] != a[end]){
        return false;
    }
    return allEqual(a, start++, end);
} 

3 个答案:

答案 0 :(得分:8)

变化

return allEqual(a, start++, end);

return allEqual(a, start+1, end);

start++start的原始值传递给递归调用(这是后递增运算符返回的值),因此递归将永远不会结束,并且您可能得到StackOverflowError。< / p>

答案 1 :(得分:2)

最简单的方法是简单地获取数组的第一个值,直到单个值不相同为止。

public void allEqual(int[] arr) {
    if(arr.length==0) return false;
    for(int i=0; i<arr.length; i++)
        if(arr[0]!=arr[i]) return false;
    return true;
}

编辑:意识到这个答案是用递归做的,而我的回答不是那样做的。

答案 2 :(得分:1)

您可以使用经典的分治法来解决它。将数组分成两半,直到有两个元素,然后检查它们是否相等。然后征服他们并比较价值观。像这样:

class Ideone {

    static boolean checkEquals(int a[], int start, int length) {

        if (length==2)
            return a[start]==a[start+1] && a[start]==a[0];
        else
            return checkEquals(a,start+0,length/2) &&
                   checkEquals(a,start+length/2,length/2);     
    }

    public static void main (String[] args) {
        int a[]={1,1,1,1,1,1,1,1};
        System.out.println(checkEquals(a,0,8));
    }
}

已执行here