我想用手解决递归问题

时间:2017-01-21 23:09:20

标签: recursion

我是自学成才,并且认为我理解递归,但我无法解决这个问题:

通话recur(12)返回了什么?

通话recur (25)返回了什么?

 public static int recur (int y)
 {
      if(y <=3)
             return y%4;
      return recur(y-2) + recur(y-1) + 1;
  }

请有人帮我理解如何解决这些问题吗?

3 个答案:

答案 0 :(得分:0)

首先,我认为你的意思是:

public static int recur(int y)

但是通过在方法的开头放置一个print语句来发现此方法的结果:

public static int recur(int y)
  {
    System.out.println(y);
      if(y <=3)
             return y % 4;
      return recur(y-2) + recur(y-1) + 1;
  }

我不确定你的意思是什么意思,因为有几个回报。无论如何,这些是解决这个问题的步骤:

  1. 是12 <= 3?否
  2. recur(10)不要继续下一个递归声明
  3. 是10 <= 3?否
  4. recur(8)不要继续进行下一个递归声明
  5. 继续此模式,直到y <= 3为真。然后你返回y%4(不管这个数字是什么)。
  6. 现在您已准备好在最近​​的recur()调用中转到第二个递归语句。所以,复发(y - 1)。
  7. 是&lt; = 3?如果是,则返回y%4。如果不是,请执行类似于步骤1的过程
  8. 一旦你返回,你添加recur(y - 2)+ recur(y - 1)+ 1的结果。这将是一个课程。
  9. 继续这个过程进行多次迭代。
  10. 即使对于高级程序员来说,递归也很难理解和理解。

    这是一个非常常见(和类似)的问题供您查看:

    Java recursive Fibonacci sequence

    我希望这有帮助! 祝你好运!

答案 1 :(得分:0)

我已经删除了那里的模数,因为任何非{4}的非n只会变成public static int recur (int y) { return y <= 3 ? y : recur(y-2) + recur(y-1) + 1; } 所以我最终得到了:

y

我想从测试基本情况开始,那么4当它们是0,1,2,3时会发生什么?那么论证就是0,1,2,3当然。

3怎么样?那么它不小于或等于recur(4-2) + recur(4-1) + 1,你可以用recur(2) + recur(3) + 1 recur替换它。现在,您可以解决每个2 + 3 + 1个问题,因为我们之前建立的问题已成为其论点,因此您最终得到12

现在为25recur(5); //=> recur(3) + recur(4) + 1; //==> recur(3) + ( recur(2) + recur(3) + 1 ) + 1; //==> 3 + 2 + 3 + 1 + 1; // ==> 10 执行此操作与更多步骤完全相同。这是5还有一步:

y

所以实际上递归会暂停当前迭代中的过程,直到你得到当前迭代加在一起的答案,所以我可以用相反的方式做到这一点,但是每次我现在使用了一个先前计算的值。
您应该有足够的信息来执行任何modifyF

答案 2 :(得分:0)

这只不过是增强的斐波那契序列。 前四个术语定义为0,1,2,3。此后,每个术语是前两个术语的总和,加一个。这个+1增强是它与经典Fibonacci序列的不同之处。只需手动添加系列:

0
1
2
3
3+2+1 = 6
6+3+1 = 10
10+6+1 = 17
17+10+1 = 28
...