我获得以下代码
int go(int x){
if (x<1)
return 1;
else
return x + go(x-2) + go(x-3);
}
答案是7
通过调用go(3)
,但每次我这样做(我必须手工完成)我得到8.这是我的逻辑:
3 + go(1)+ go(0)/ 1 = 3 + go(1)+ 1(因为0小于1)
然后,
3 + go(-1)= 3 + 1
因此,
3 + 4 + 1 = 8.
我做错了什么?
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分: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
希望结构显示它将如何发挥作用。如果有的话,总是尝试用递归方法创建分支