私はかなり新しい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);
}
}
メソッドには2つのパラメータしかかかりませんが、再帰呼び出しでは3を渡しています。実際のコードを投稿してください。 –
また、このコードがいくつかの繰り返しの後に終了すると言うことには驚いています: 'k == 0 'のときに再帰を止めるのではなく、むしろ無期限に再帰を続けてください。 –
@Andy Turnerに感謝します。私はコードを更新しました。はい、元々は3つのパラメータがありましたが、理解しようとすると2つのパラメータに減らしました。その間にすべてのsysoutsを削除しようとしていましたが、私はその部分を見逃しました。はい、k == 0のときは11から99になりますが、k == 1のときは1から9になります。 – learning