我給下面的代碼遞歸錯誤輸出
int go(int x){
if (x<1)
return 1;
else
return x + go(x-2) + go(x-3);
}
答案是7
通過調用go(3)
但每次我這樣做,(我有手工做),我得到8。這是我的邏輯:
3 +去(1)+去(0)/ 1 = 3 +去(1)+ 1(因爲0小於1)
然後,
3 +去(-1) = 3 + 1
因此,
3 + 4 + 1 = 8
我在做什麼錯?
我給下面的代碼遞歸錯誤輸出
int go(int x){
if (x<1)
return 1;
else
return x + go(x-2) + go(x-3);
}
答案是7
通過調用go(3)
但每次我這樣做,(我有手工做),我得到8。這是我的邏輯:
3 +去(1)+去(0)/ 1 = 3 +去(1)+ 1(因爲0小於1)
然後,
3 +去(-1) = 3 + 1
因此,
3 + 4 + 1 = 8
我在做什麼錯?
answer is 7 which is correct.
3 + go(3-2) + go(3-3)
= 3 + go(1) + go(0)
go(0) = 1
go(1) = 1 + go(1-2) + go (1-3)
= 1 + go(-1) + go(-2)
= 1 + 1 + 1
= 3
= putting all values go(3) = 7
,您的基本情況是x<1
,所以每當出現這種情況1將被退回。
以下是它將如何發揮出來。
go(3)== 3 + 3 + 1 == 7
3 + go(3-2)=>go(1) + go(3-3)=>go(0)
go(1)==1+1+1==3
1 + go(1-2)=>go(-1) + go(1-3)=>go(-2)
go(-1)==1
1
go(-2)==1
1
go(0)==1
1
希望結構顯示它將如何發揮出來。如果有的話,總是嘗試做一個遞歸方法創建的分支
對於我在這個問題上寫的代碼 – JavaB
'3 + go(-1)'來自哪裏? – MikeCAT
4從哪裏來? –