私はJavaを使い慣れていて、再帰の回りに頭を抱えています。以下の関数は、2つのソート済みリスト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);
}
}
ご協力いただければ幸いです。ありがとうございました。
2つの整数リストが順序付けられていますか?そうでない場合、関数の最初のバージョンは機能しません。 – Leon
はい、申し訳ありませんが、2つのリストは既にソートされています。 –