我不知道为什么,但我无法追踪这次递归因为我的死亡而且真的让我感到沮丧。我很乐意,如果有人能帮忙解释如何解决这个问题。
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。不要理解这是怎么回事。
答案 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