function f($n)
{
if ($n == 0 || $n == 1)
return 2;
return f($n-1) + f($n-2);
}
echo f(5);这给了我16,但我不知道为什么。
我知道大概是这样的:
return f(4) + f(3)
return f(4) + f(3)+ f(3) + f(1)但是现在因为n的值是1,所以它应该返回2。
所以它本质上是
return f(4) + f(3)+ f(2)它应该是9,但它给了我16。
有没有人能解释一下是怎么回事?
发布于 2017-12-14 10:51:07
f(5) = f(4) + f(3)
= f(3) + f(2) + f(2) + f(1)
= f(2) +f(1) + f(1) + f(0) + f(1) + f(0) + 2
= f(1)+f(0)+ 2 + 2 + 2 + 2 + 2 + 2
= 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2
= 16希望上面的解释能解释16值
发布于 2017-12-14 11:07:38
f(0)=2
f(1)=2
f(2)=f(1)+f(0)=2+2=4
f(3)=f(2)+f(1)=4+2=6
f(4)=f(3)+f(2)=6+4=10
f(5)=f(4)+f(3)=10+6=16发布于 2017-12-14 11:27:52
下面是递归函数的可视化表示,显示了每次迭代的结果
f(5) 1st
/ \
/ \
/ \
/ \
/ \
/ \
f(4) + f(3) 2nd
/ \ / \
/ \ / \
f(3) + f(2) + f(2) +f(1) 3rd
/ \ / \ / \ |
f(2)+f(1)+f(1)+f(0) + f(1)+f(0)+ 2 4th
/ \ | | + | | | |
f(1)+f(0)+2 + 2 + 2 + 2 + 2 + 2 5th
| | | | | | | |
2 + 2 +2 + 2 + 2 + 2 + 2 + 2 = 16 Resulthttps://stackoverflow.com/questions/47805053
复制相似问题