2017-08-17 13 views
0

再帰を実践しています(少なくとも、これは私がやろうとしていることです)。私の期待は、 "dlrow olleh"を11回印刷するコードですが、それは一度だけ印刷されます。理由は?再帰が機能しない

import java.lang.StringBuilder; 

public class Practice { 

    public static void main(String[] args){ 
     String str = "hello world"; 
     int count = new StringBuilder(str).length(); 
     System.out.print(backwards(str, count)); 
    } 

    public static String backwards(String word, int letters){ 

     while(letters>0){ 
      return new StringBuilder(word).reverse().toString(); 
     } 

     return backwards(word,letters-1); 
    } 
} 
+3

あなたは持っているように見えますベースケースと再帰ケースを入れ替えました。また、再帰でwhileループを必要としないのは、再帰が – UnknowableIneffable

+1

の場合ですが、ケースを入れ替える以外に、ここで再帰を使用することはありません。すべての再帰呼び出しは変数を減らしてからその値がゼロになるとき何か。代わりに、すぐにそのことをやり直してください。あなたが再帰を練習したい場合は、再帰を必要とする何かをしていることを確認してください:) –

答えて

0

あなたのベースケースは、最後ではなく最初にトリガされているようです。ご覧のように、私が後方に電話すると( "Hello world"、11)、文字> 0以来、それは新しいStringBuilder(word).reverse.toString()を返します。

私はあなたの周りの2つを切り替えるつもりだと思う。

0

したがって、基本的にはletters変数を変更していないので、whileは終了しません。

しかしreturnはwhile文を壊す文です。

recoursiveアプローチは、私は、カウントを使用しています。この

public static void main(String[ ] args) { 
    String str = "hello world"; 
    int count = new StringBuilder(str).length(); 
    System.out.print(backwards(str, count - 1, new StringBuilder())); 
} 

public static String backwards(String word, int letters, StringBuilder sb){ 
    if (letters >= 0) { 
     sb.append(word.charAt(letters)); 
     return backwards(word, letters - 1, sb); 
    } else { 
     return sb.toString(); 
    } 

} 

予告のようなものになるだろう - 1とインデックスは0から大きさに行くので、文字が= 0> - 1

関連する問題