【问题标题】:Fibonacci sequence return斐波那契数列回归
【发布时间】:2017-01-15 12:09:37
【问题描述】:

我正在使用 PHP 玩斐波那契数列。我了解递归函数的概念,但我不明白这里发生了什么。

代码:

function fs($n) {
    if ($n < 1) {
       return 1;
    } // if

    echo " n is " . $n . "<br>"; 
    echo fs($n - 1) + fs($n - 2) . " when n is " . $n . "<br>";
} // function

echo fs(3);

这是回报:

n is 3
n is 2
n is 1
2 when n is 1
1 when n is 2
n is 1
2 when n is 1
0 when n is 3

【问题讨论】:

  • 你到底有什么不明白的?你所拥有的是一个计算斐波那契数的函数。是看不懂斐波那契数列,还是看不懂输出?
  • 我了解斐波那契,但不了解输出。 “n 为 3”,然后“n 为 2”,然后“n 为 1” - 为什么下一个输出“n 为 1 时为 2”?这是我不明白的代码执行顺序。提前致谢

标签: php fibonacci


【解决方案1】:

您的function,如果输入小于 1 将返回 1。否则它将打印输入的值并递归调用函数以获得较小的值。由于 -1 将返回 1,因此您将得到不正确的值。让我们用 1 来调用它。它会为 0 和 -1 调用它,每个返回 1 并将它们相加,结果为 2,这是不正确的。您需要以不同的方式实现它:

    function fs($n){

    if ($n<=1) {
        return 1;
    }
    echo fs($n-1)+fs($n-2) ." when n is ".$n. "<br>";   

   } //function

   fs(3);

这将解决问题。

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 2012-11-19
    • 2016-11-07
    • 2012-02-16
    • 1970-01-01
    • 2010-12-03
    • 2013-04-11
    • 1970-01-01
    相关资源
    最近更新 更多