void func(int num){
if(num< 3){
printf("%d ", num);
func(num+ 1);
printf("%d ", num);
}
}
この関数をfunc(0)と呼びます。 なぜ結果は0 1 2 2 1 0ですか? なぜそれが減少しているのかわかりません。再帰:この結果を理解できない
void func(int num){
if(num< 3){
printf("%d ", num);
func(num+ 1);
printf("%d ", num);
}
}
この関数をfunc(0)と呼びます。 なぜ結果は0 1 2 2 1 0ですか? なぜそれが減少しているのかわかりません。再帰:この結果を理解できない
は、ここで最初の3つの数字は、最初のprintfから来スタックトレース
f(0)
print 0
f(1)
print 1
f(2)
print 2
f(3) // 3 < 3 == false
print 2
print 1
print 0
私はなぜ3が間違っているのかを知っているので、2を印刷します。しかし、なぜそれも1と0を印刷しますか? –
別の関数(A)の中で関数(B)を呼び出すと、関数(A)を中断せず、呼び出された関数(B)が終了するとスタックに戻します。 – CMPS
うわー、 。これによって多くのことがクリアされました。 –
だし、スタックが巻き戻されるように、第2の3つの数字は、第二のprintfから来ます。それをもっと良く見るには、フォーマット文字列として ''%d ''と' 'b:%d" 'を試してください。 – user3386109
ええ、私はそれを得るが、なぜそれが2から0になるのか、それは私には意味がないのだろうか? –
関数は呼び出されないため、コードは何も行いません。 –