【问题标题】:I am trying to solve recursion by hand我正在尝试手动解决递归
【发布时间】:2017-01-24 01:19:56
【问题描述】:

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

调用recur(12)返回什么?

调用recur (25)返回什么?

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

有人可以帮助我了解如何解决这些问题吗?

【问题讨论】:

  • 不可能。我们不知道y 是什么!除非你的意思是u?准确性非常重要....

标签: recursion


【解决方案1】:

首先,我假设你的意思是:

public static int recur(int y)

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

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
  2. recur(10) 不要继续下一个递归语句
  3. 是 10
  4. recur(8) 不要继续下一个递归语句
  5. 继续这个模式直到 y
  6. 现在您已准备好转到最近的 recur() 调用中的第二个递归语句。所以,recur(y - 1)。
  7. y
  8. 返回后,添加 recur(y - 2) + recur(y - 1) + 1 的结果。这当然是一个数字。
  9. 继续此过程进行多次迭代。

即使对于高级程序员来说,递归有时也很难遵循和理解。

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

Java recursive Fibonacci sequence

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

【讨论】:

    【解决方案2】:

    我已经删除了那里的模数,因为任何小于 4 的非负 n 都会变成 n 所以我最终得到:

    public static int recur (int y)
    {
          return y <= 3 ?
                 y :
                 recur(y-2) + recur(y-1) + 1;
    }
    

    我喜欢从测试基本情况开始,那么当 y 为 0、1、2、3 时会发生什么?好吧,论点当然是0,1,2,3。

    4 呢?那么它不小于或等于3,您可以将其替换为recur(4-2) + recur(4-1) + 1,即recur(2) + recur(3) + 1。现在你可以解决每个recur 的问题,因为我们早先建立了它的参数,所以你最终得到2 + 3 + 1

    现在为1225 执行此操作完全相同,只是步骤更多。这里是 5,它只有一个步骤:

    recur(5); //=>
    recur(3) + recur(4) + 1; //==>
    recur(3) + ( recur(2) + recur(3) + 1 ) + 1; //==>
    3 + 2 + 3 + 1 + 1; // ==>
    10
    

    因此,实际上递归会在当前迭代中停止该过程,直到您得到当前迭代相加的答案,所以我可以以相反的方式完成此操作,但每次我现在使用时都会暂停之前的计算值。
    你应该有足够的信息来做任何y

    【讨论】:

      【解决方案3】:

      这只不过是一个增强的斐波那契数列。 前四项定义为 0、1、2、3。此后,每一项都是前两项之和,加一。这个 +1 增强是它与经典斐波那契数列不同的地方。只需手动添加系列:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-09
        • 1970-01-01
        • 2013-01-13
        • 1970-01-01
        • 2012-11-14
        • 2023-01-04
        • 1970-01-01
        相关资源
        最近更新 更多