首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >描述php代码函数/递归;11级函数/递归

描述php代码函数/递归;11级函数/递归
EN

Stack Overflow用户
提问于 2017-12-14 10:38:16
回答 5查看 46关注 0票数 1
代码语言:javascript
复制
function f($n)
{
   if ($n == 0 || $n == 1)
      return 2;
   return  f($n-1) + f($n-2);
}

echo f(5);

这给了我16,但我不知道为什么。

我知道大概是这样的:

代码语言:javascript
复制
return f(4) + f(3)
return f(4) + f(3)+ f(3) + f(1)

但是现在因为n的值是1,所以它应该返回2

所以它本质上是

代码语言:javascript
复制
return f(4) + f(3)+ f(2)

它应该是9,但它给了我16

有没有人能解释一下是怎么回事?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-12-14 10:51:07

代码语言:javascript
复制
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值

票数 5
EN

Stack Overflow用户

发布于 2017-12-14 11:07:38

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2017-12-14 11:27:52

下面是递归函数的可视化表示,显示了每次迭代的结果

代码语言:javascript
复制
                      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        Result
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47805053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档