再帰的な文字列逆シーケンスの使用
1903 ワード
再帰的な文字列逆シーケンスの使用
次のコードは、文字列の逆シーケンス出力を実現します.
たとえば、実行方法
どうやってこの方法を理解しますか?
理解を容易にするために、私たちは以上の方法を単行改造し、改造後の価格方法は以下の通りである.
その後,作成後のメソッドブレークポイントを
例えば
再帰実行プロセスのまとめ:メソッドが返す順序は、メソッドが実行する順序と逆である. は、最後に実行された方法であり、最初に戻り、最初に実行された方法であり、最後に戻る. 再帰的アプローチは、1つのインスタックおよびアウトスタックのプロセスと同様に、戻るプロセス全体を実行する.
再帰的配列逆シーケンスの使用
考え方:両端から中間に向かって両端位置の値を順番に交換し、交換が完了するまで.たとえば、長さ6の配列の場合、交換プロセスは次のようになります.
0:5交換0と5位置の要素1:4交換4と4位置の要素2:3交換2と3位置の要素3:2交換完了、再帰終了
次のコードは、文字列の逆シーケンス出力を実現します.
/** s , abcde edcba */
public String reverse(String s) {
return s.length() > 0 ? reverse(s.substring(1)) + s.charAt(0) : "";
}
たとえば、実行方法
reverse("abcde");
は、結果edcba
を返します.どうやってこの方法を理解しますか?
理解を容易にするために、私たちは以上の方法を単行改造し、改造後の価格方法は以下の通りである.
/** s , abcde edcba */
public static String reverse(String s) {
boolean isNotEmpty = s.length() > 0;
if (isNotEmpty) {
String substring = s.substring(1);
String reverse = reverse(substring);
String result = reverse + s.charAt(0);
return result;
}
return "";
}
その後,作成後のメソッドブレークポイントを
Debug
行うことで,再帰メソッドの実行フローを明らかにすることができる.例えば
reverse("abcde")
を実行し、具体的な実行プロセスは以下の通りである.// 5 , 5
1. substring("abcde");
2. substring("bcde");
3. substring("cde");
4. substring("de");
5. substring("e");
// 5 , , , :
5. e
4. d
3. c
2. b
1. a
再帰実行プロセスのまとめ:
再帰的配列逆シーケンスの使用
考え方:両端から中間に向かって両端位置の値を順番に交換し、交換が完了するまで.たとえば、長さ6の配列の場合、交換プロセスは次のようになります.
0:5交換0と5位置の要素1:4交換4と4位置の要素2:3交換2と3位置の要素3:2交換完了、再帰終了
/**
* ;
* :
* 1 1
* 2 2
* 3 3
* ...
*/
public void reverseArray(int[] array, int start, int end) {
//
if (start < end) {
int temp = array[end];
array[end] = array[start];
array[start] = temp;
reverseArray(array, start + 1, end - 1);
}
// ,
System.out.println(Arrays.toString(array));
}