2016-06-20 3 views
-2

私はかなり新しいJavaです。私は再帰を学んでいて、このコードを読んでそれをトレースできるかどうかを調べていました。ベースケースでforループ内での再帰、ベースケースが変更されたときの反復回数は要素によって変化します

、私は0から1へk値を変更すると、9

倍の反復変更の数は、私はいくつかのsysoutsでそれを追跡しようとした、まだ理解していませんそれ。私はこれがforループ内の再帰であることを理解しています。私はforループのない再帰出力を理解していますが、それが再び追加されると、ベースケースが0になったときにそれがなぜ呼び出されるのかを追跡することはできません。k = 2の最初の呼び出しを考えると、ベース条件が1から0に変化したときの9〜81?

私はそれを理解しようと時間を費やしました。

コードは以下の通りである:

public class recurforloop { 

    public static void printrecurforloop(int number, int k) { 
//when I change the value of k == 1, the iterations reduces from 81 to 9 
     if (k == 0) { 
      System.out.println(number); 
     } 

     for (int i = (1); i < 10; i++) { 
      printrecurforloop(number * 10 + i, k - 1); 
     } 
    } 

    public static void main(String[] args) { 
     printrecurforloop(0, 2); 
    } 
} 
+1

メソッドには2つのパラメータしかかかりませんが、再帰呼び出しでは3を渡しています。実際のコードを投稿してください。 –

+3

また、このコードがいくつかの繰り返しの後に終了すると言うことには驚いています: 'k == 0 'のときに再帰を止めるのではなく、むしろ無期限に再帰を続けてください。 –

+0

@Andy Turnerに感謝します。私はコードを更新しました。はい、元々は3つのパラメータがありましたが、理解しようとすると2つのパラメータに減らしました。その間にすべてのsysoutsを削除しようとしていましたが、私はその部分を見逃しました。はい、k == 0のときは11から99になりますが、k == 1のときは1から9になります。 – learning

答えて

0

たびにprintrecurforloopmethodそれはK = 0になるまでforループ内の9回呼び出されていると呼ばれているので、それは9倍に変更されます。

+0

@Aaron Rotemに感謝します。私はそれをどのように要約したのが好きです。私が理解していないのは、なぜk == 1になるまでそれ自体を9回だけ呼び出すのかということです。 k == 0の場合、9回9回、もう一度行くことをどのように知っていますか? – learning

+0

k = 0の場合、再帰呼び出しを停止します。したがって、forループの中に再帰的メソッドの代わりに入れ子になったforループを想像してください。このケースでは、本質的に同じことをしているからです。 forループは、基底ケースが呼び出されるまで繰り返され、ループを終了して内部ループを再度呼び出します。そのプロセスは、外側ループの基本条件が満たされるまで繰り返されます。あなたのケースでは、外側ループは9回実行され、再帰的メソッド自体は9回呼び出します。 –

+0

@Aaron Rotemに感謝します。それは私を助けます。ネストされたforループと考えることができます。再帰呼び出しは、k == 0の場合には再び9回呼び出します。ありがとう – learning

関連する問題