再帰処理の文字列(つまりchar array
)を実行しています。 recursion tree
では、child
にある文字列の長さが1未満です。parent
です。同じ高さのすべての子は、同じ長さの文字列ですが、異なる文字を持ちます。新しいstring
の長さが古い文字列の長さ以上になるたびに再帰を停止したいのですが、再帰と再帰の間にこの条件を挿入できません。 System.exit(0)
を使用すると、完全なプログラムが終了します。以下は私のコードsnippet-私は3行目でSystem.out.println("length=" + len);
を入れて実際に特定の条件で再帰を停止できません
private static void getMinLen(char[] oldStr) {
int len = oldStr.length;
/*
* This terminates the whole program, using break in place of
* System.exit(0) is not effective
*/
if (len < 2)
System.exit(0);
char[] newStr = new char[len - 1];
for (int i = 0; i < len - 1; i++) {
/*
* Every character is matched with its next character and a new char
* array is created having length (len-1)
*/
getMinLen(newStr);
}
}
。最初に、長さは降順に印刷されますが、長さは増加し、再帰のために減少します。私は、コンソールがfollowing-
私は単に新しい長さが古いの長さ以上になる時はいつでも私の再帰を停止したいlength=6
length=5
length=4
length=3
length=2
length=1
length=3
length=3
length=2
length=1
length=4
length=3
length=2
length=1
を示し意味します。
あなたは増分変数を使わずに 'for'ループを使っていますか?ちょうど同じ引数でメソッド 'getMinLen'を実行するだけですか? –
しかし、あなたのメソッドには正確に何をしたいですか?入力が 'new char [] {'h'、 'e'、 'l'、 'l'、 'o'}'なら出力はどうなるでしょうか? – adarshr
あなたのループは、一連の増加する引数で 'getMinLen'を呼び出します。これはアウトプットのダウン・アップ・パターンを説明する。それは、再帰関数からの破棄または復帰とは何の関係もありません。反復的なループで再帰的なロジックを複製しています。 –