我是自学成才,并且认为我理解递归,但我无法解决这个问题:
通话recur(12)
返回了什么?
通话recur (25)
返回了什么?
public static int recur (int y)
{
if(y <=3)
return y%4;
return recur(y-2) + recur(y-1) + 1;
}
请有人帮我理解如何解决这些问题吗?
答案 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;
}
我不确定你的意思是什么意思,因为有几个回报。无论如何,这些是解决这个问题的步骤:
即使对于高级程序员来说,递归也很难理解和理解。
这是一个非常常见(和类似)的问题供您查看:
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
。
现在为25
或recur(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
...