需要了解这种递归

时间:2016-05-02 20:28:39

标签: java recursion

我不知道为什么,但我无法追踪这次递归因为我的死亡而且真的让我感到沮丧。我很乐意,如果有人能帮忙解释如何解决这个问题。

public class MindNumber
{

  public static int numb(int i)
  {
    int result;


    if (i < 1)
    {
      result = -1;  

    }
    else if (i < 10)
    {
      result = numb(i - 1) + numb(i - 2);

    }
    else if (i % 2 == 0)
    {
      result = numb(i / 2);
    }
    else
    {
      result = numb(i / 2) + numb(i % 2);

    }

    return result;
  }
}

public class MindNumberDriver
{
  public static void main(String[] args)
  {
    int i;

    i = MindNumber.numb(12);

    System.out.println(i);

  }
}

输出为-21。不要理解这是怎么回事。

2 个答案:

答案 0 :(得分:2)

这是1到9范围内数字的负Fibonacci序列:

If **i** is even, recur using half that value;
otherwise, recur using half the value rounded up.

这里的关键步骤是前两个条件条款,i&lt; 1和i&lt; 10.其他两个简单地翻译:

$host

这里的执行是

i = 12;以12/2或6重复。
i = 6; return -f(6)

如果要跟踪执行,请使用一种非常古老的低技术调试技术:坚持使用print语句来跟踪执行和数据流。输入例程时,打印其参数。在您离开之前,打印您即将返回的值。标记每个印刷品,以便您可以按照操作进行操作。

答案 1 :(得分:1)

帮助您完成整个过程:

要开始i = 12,我们输入第三个条件,返回numb(6)

numb(6)返回麻木(5)+麻木(4)

numb(5)返回麻木(4)+麻木(3)

numb(4)返回麻木(3)+麻木(2)

numb(3)返回麻木(2)+麻木(1)

numb(2)返回麻木(1)+麻木(0)=麻木(1)+( - 1)

numb(1)返回麻木(0)+麻木(-1)=( - 1)+( - 1)=( - 2)

现在我们可以开始回到调用堆栈。

numb(2)返回麻木(1)+麻木(0)=( - 2)+( - 1)=( - 3)

麻木(3)返回麻木(2)+麻木(1)=( - 3)+( - 2)=( - 5)

... ECT