私は現在Javaで再帰を学習しています。私は練習のために少しコードを作った。再帰に関する問題 - なぜ私は逆出力を得るのか分かりません。
public class Tester{
public static void main(String[] args){
rec(5);
}
public static void rec(int x){
if(x<=0){
return;
}else{
System.out.print(x+" ");
rec(x-1);
}
}
}
// Output: 5 4 3 2 1
しかし、私は今rec(x-1);
でSystem.out.print(x+" ");
を切り替えた場合、私は完全に別の出力、すなわち、逆取得:どのようにこれを可能にすることができます1 2 3 4 5
を?私はそのように理解しています:
私たちは整数5
を持っています。 if文は適用されないので、5
を1
で減らし、x=4
とすると、この方法を繰り返します(印刷が行われず、何も印刷されません)。言ったように、x=4
と同じことをします。ステートメントが適用されない場合は、4
を1
で減らし、この方法を繰り返します。我々はそれがあるまで繰り返す。x=0
。この場合、私たちは戻るので、これがメソッドの終わりです。私は逆の出力をどのように持っているのか全く理解していませんが、なぜ出力があるのか理解できません...? :■
ああ...申し訳ありませんが、私は前の行を読んでいませんでした。解決策は、スタックによる再帰的な作業です!再帰関数を呼び出すと、関数の現在の状態がスタックに格納されます。関数が戻ると、現在の状態が復元され、残りの部分が実行されます。 –