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? 我不知道爲什麼它在減少。遞歸:不明白這個結果
這裏有一個堆棧跟蹤
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
哇,謝謝,我從來沒有想到過。這清理了很多東西。 –
的前三個數字來自第一個printf,第二三個數字來自於第二個printf作爲堆解開。爲了更好地理解,請嘗試'「a:%d」'和'「b:%d」'作爲格式字符串。 – user3386109
是的,我明白了,但是爲什麼它會從2變爲0,這對我沒有意義? –
你的代碼什麼都不做,因爲函數從來沒有被調用過。 –