最近、私は思ったほど再帰を得られないことに気付きました。だから私はそれを理解するためにできるだけ多くの例を見つけようとしているのですが、私は非常に早く捕まえました。バイナリサーチの再帰の概念をJavaで与えられた例で把握するには?
単純なバイナリ検索コードですが、再帰部分を理解するのは非常に困難です。特に私は、次のステップごとに何が変わるのか分かりません。いずれかの変数に+1または-1が与えられていれば、それを得るかもしれませんが、ここでは変数は自然にそのまま渡されます。
public class BinarySearchRecursion {
public static int binarySearch(int[] array, int value, int start, int end) {
if ((end - start) <= 1) {
if (array[start] == value)
return start;
if (array[end] == value)
return end;
return -1;
}
int midPoint = (start + end)/2;
if (array[midPoint] > value) {
return binarySearch(array, value, 0, midPoint);
} else {
return binarySearch(array, value, midPoint, end);
}
}
public static void main(String[] args) {
int[] a = { 4, 9, 10 };
System.out.println(binarySearch(a, 10, 0, a.length - 1));
}
}
私はこの変更を考えています: 'int midPoint =(start + end)/ 2;' – Keiwan
コードはうまく動作しますが、再帰はわかりません。私のコードではありません – Seinfeld
@Aasmund Eldhusetが指摘している問題を除き、コードが動作することを知っています。あなたは「私はさらなるステップごとに何が変わるかを見ていない」と言いました。「変数は何も変更せずに(...)渡されています」ので、変数の変更が発生する行を指摘しました。 – Keiwan