【问题标题】:PHP: Can someone explain how this code works? (Fibonacci)PHP:有人能解释一下这段代码是如何工作的吗? (斐波那契)
【发布时间】:2009-11-28 02:41:45
【问题描述】:

我保证这不是家庭作业。我只是一个好奇的新手。

这是怎么做到的:

function f($i){return $i<2?$i:f($i-1)+f($i-2);}

(聪明人写的)

产生与此相同的结果

function fibonacci($n, $arr = array(0,1)){
    $arr[] = $arr[(count($arr) - 1)] + $arr[(count($arr) - 2)];
    if (count($arr) == $n) return $arr[$n - 1];
    else return fibonacci($n, $arr);
}

(我的)

我想我只是不明白语法。里面有if语句吗?

【问题讨论】:

    标签: php fibonacci


    【解决方案1】:

    运算符“?”被命名为三元运算符。它的用法如下:p1?p2:p3 它表示如果 p1 为真,则为 p2,否则为 p3。

    【讨论】:

      【解决方案2】:

      里面有一个if语句。它被称为ternary operator

      condition ? if true : if false
      

      如果 $i 小于 2,则返回 $i,否则返回 f($i-1) + f($i-2)。我假设递归函数调用不是你难以理解的,但如果你用谷歌搜索的话,就会有大量递归斐波那契代码的例子。

      【讨论】:

        【解决方案3】:

        第一个函数是简写。这就是它正在做的事情

        if($i < 2) { // $i < 2 ?
          return $i;
        }
        else { // :
          return f($i-1)+f($i-2);
        }
        

        如果小于两个,则不必调用该函数。如果为 2 或更大,则递归调用该函数。

        【讨论】:

          【解决方案4】:

          问号是条件表达式:

          x ? a : b
          

          如果x 为真,则计算为a,如果为假,则计算为b

          【讨论】:

            【解决方案5】:
            function f($i){return $i<2?$i:f($i-1)+f($i-2);}
            

            意思

            function f($i)
            {
                if $(i < 2)
                    return $i;
                return f($i-1) + f($i-2);
            }
            

            这是斐波那契方程的直接表达。

            另一个函数创建并使用生成结果的缓存:这是自评估 fib(4) 以来的一项重大优化,例如,否则会评估 fib(2) 3 或 4 次,而 fib(1) 则相当多更多。

            【讨论】:

            • 是的!在 F(100) 上尝试这两个函数。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-01-06
            • 2016-06-27
            • 1970-01-01
            • 2021-08-04
            • 2018-09-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多