我是Java的新手,仍然试图绕过递归。下面的函数在两个排序列表列表x和列表y的第一个交集处返回true。
public static boolean checkIntersection(List<Integer> x, List<Integer> y) {
int i = 0;
int j = 0;
while (i < x.size() && j < y.size()) {
if (x.get(i).equals(y.get(j))) {
return true;
} else if (x.get(i) < y.get(j)) {
i++;
} else {
j++;
}
}
return false;
}
现在我一直试图用递归来实现它,我知道应该有一个基本情况,在这种情况下是一个空列表,然后尝试通过一次排除一个元素来减少列表并将其反馈给相同的递归函数,但是我无法一遍又一遍地通过列表的其余部分来检查交集。
public static boolean recursiveChecking(List<Integer> x,List<Integer> y) {
if(x.size() == 0){
return false;
}
else {
return recursiveChecking(x.subList(1, x.size()-1), y);
}
}
任何帮助都将受到高度赞赏。谢谢。
答案 0 :(得分:5)
使递归的一般方法是想到两件事:
false
)或两个非空列表的初始元素相同时,您可以轻松地生成答案(结果为{{ 1}})true
代替ListIterator<Integer>
表示非{ - 破坏性解决方案。* 当然,在这种情况下,你需要注意在通话后添加你的号码,或者在开始递归链之前复制两个列表。
答案 1 :(得分:4)
当列表被排序时,您的递归应该删除具有较小第一个值的列表的第一个元素。然后,如果两个列表都以相同的数字开头,则必须返回true;如果任何列表为空,则返回false。否则你继续删除元素。这看起来像这样(这段代码未经测试):
List<Integer>