我只是使用迭代,因为它容易1000倍,但为了这个功课问题,我必须使用递归比较两个整数。请注意,每个数字都存储为一个arrayList,每个数字作为单个元素,因此:12345 = [1,2,3,4,5]。目前我有这个方法
public boolean isEqual(LargeInt otherLargeInt) {
if(digitList.size() != otherLargeInt.digitList.size()
return false;
因此,如果两个数组列表的大小或“数字”不匹配,那么它们显然不相等。我要做的是递归地比较每个数字的每个数字。根据我的理解,只要其中一个数字不匹配,我就可以退出递归方法。有人可能会朝着正确的方向推动我吗?我不确定如何处理这类问题。
答案 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;
}
}