2016-03-07 96 views
0

我給下面的代碼遞歸錯誤輸出

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

我在做什麼錯?

+0

對於我在這個問題上寫的代碼 – JavaB

+1

'3 + go(-1)'來自哪裏? – MikeCAT

+0

4從哪裏來? –

回答

4

這聽起來像你犯了錯誤go(1) = 3 + go(1-2)其中實際公式是go(1) = 1 + go(1-2) + go(1-3)

go(3) 
= 3 + go(1) + go(0) 
= 3 + go(1) + 1 
= 3 + (1 + go(-1) + go(-2)) + 1 
= 3 + (1 + 1 + 1) + 1 
= 7 
+0

我不明白你是怎麼得到的「(1 + go(-1)+ go(-2))」..對不起,我在這個 – JavaB

+0

nvm新,我明白了!非常感謝你的幫助! – JavaB

2
go(3) 

3 + go(3-2) + go(3-3) 

3 + go(1) + go(0) 

3 + 1 + go(1-2) + go(1-3) + 1 

5 + go(-1) + go(-2) 

5 + 1 + 1 

7 
+0

你從哪裏得到「1 +去(1-2)+去(1-3)」?對不起,如果我的問題是愚蠢的,我是一個初學者 – JavaB

+1

nvm,我明白了!非常感謝你的幫助! – JavaB

1
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 
0
在這個遞歸方法

,您的基本情況是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 

希望結構顯示它將如何發揮出來。如果有的話,總是嘗試做一個遞歸方法創建的分支