需要编写递归函数来比较其数字存储在arraylists中的两个整数(java)

时间:2015-05-18 04:50:28

标签: java recursion

我只是使用迭代,因为它容易1000倍,但为了这个功课问题,我必须使用递归比较两个整数。请注意,每个数字都存储为一个arrayList,每个数字作为单个元素,因此:12345 = [1,2,3,4,5]。目前我有这个方法

public boolean isEqual(LargeInt otherLargeInt) {
    if(digitList.size() != otherLargeInt.digitList.size()
       return false;

因此,如果两个数组列表的大小或“数字”不匹配,那么它们显然不相等。我要做的是递归地比较每个数字的每个数字。根据我的理解,只要其中一个数字不匹配,我就可以退出递归方法。有人可能会朝着正确的方向推动我吗?我不确定如何处理这类问题。

3 个答案:

答案 0 :(得分:1)

public static boolean isEqual(List<Integer> first, List<Integer> second) {
    if (first.size() != second.size())
        return false;
    else
        // Creating new ArrayLists, so that the contents of the origianl lists remains unchanged
        return isEqualHelper(new ArrayList<Integer>(first), new ArrayList<Integer>(second));
}

public static boolean isEqualHelper(List<Integer> first, List<Integer> second) {
    // We have compared all the elements and didn't find any mismatch
    if (first.isEmpty() && second.isEmpty())
        return true;
    else {
        // Found mismatch
        if (first.get(0) != second.get(0))
            return false;
        else {
            // First element of both lists are OK, now check the rest 
            // of the list recursively
            first.remove(0);
            second.remove(0);
            return isEqualHelper(first, second);
        }
    }
}

答案 1 :(得分:0)

通常,您希望比较每个列表中的第一个数字,如果它们相等然后递归,则传递列表的其余部分(除了第一个元素之外的所有内容)。至少这通常是在Lisp,Scheme,Scala等函数式语言中的样子。如果你没有办法给你&#34;列表的其余部分&#34;,那么你必须使用索引。从0开始,传递&#34;索引+ 1&#34;在递归时。

答案 2 :(得分:0)

你可以使用如下的比较,保持递归直到元素相等

要求比较:

compare(list1, list2, 0);

递归比较

boolean compare(List<Integer> list1, List<Integer> list2, int i){
    // if list size reached return true
    if(i == list1.size()){
       return true;
    }
    // else if elements at index are equal call compare(list1, list2, index + 1)
    if(list1.get(i).equals(list2.get(i))){
        return compare(list1, list2, i+1);
    }        
    else{
        return false;
    }
}