2016-03-07 99 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 

希望结构显示它将如何发挥出来。如果有的话,总是尝试做一个递归方法创建的分支