递归输出错误

时间:2016-03-07 03:21:13

标签: java loops recursion methods

我获得以下代码

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.

我做错了什么?

4 个答案:

答案 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

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