美文网首页
PHP实现斐波那契数列

PHP实现斐波那契数列

作者: 牍中玉的小木屋 | 来源:发表于2019-12-05 19:30 被阅读0次

    斐波那契数列形式

    [1,1,2,3,5,8,13,21,34,55 ...]

    概念

    前两个数都是1,从第三个数开始,当前数的值等于前两个数的和。
    Fn = F(n-1) + F(n-2)

    代码展示

    <?php
    /**
     * Created by PhpStorm.
     * User: liufeng
     * Date: 2019/12/4
     * Time: 11:14
     */
    
    function fbnq0($n)
    {
        if ($n < 3) return 1;
    
        $arr[0] = $arr[1] = 1;
    
        for ($i = 2; $i < $n; $i++) {
            $arr[$i] = $arr[$i - 1] + $arr[$i - 2];
        }
    
        return $arr;
    }
    
    function fbnq1($n)
    {
        if ($n < 3) return 1;
    
        $i = $j = 1;
    
        for ($k = 3; $k <= $n; $k++) {
            $value = $i + $j;
            $i = $j;
            $j = $value;
        }
        return $value;
    }
    
    function fbnq2($n)
    {
        if ($n < 3) return 1;
    
        return fbnq2($n - 1) + fbnq2($n - 2);
    }
    
    // 尾递归
    function fbnq3($first, $second, $n)
    {
        if ($n < 3) return 1;
    
        if ($n == 3)
            return $first + $second;
    
        return fbnq3($second, $first + $second, $n - 1);
    }
    
    echo '<pre>';
    
    /**************  计算使用时间  ******************/
    $start_time = microtime(true);
    
    $num = 10;
    print_r(fbnq0($num));
    echo '<br>';
    echo fbnq1($num);
    echo '<br>';
    echo fbnq2($num);
    echo '<br>';
    echo fbnq3(1, 1, $num);
    
    $end_time = microtime(true);
    
    echo '<hr>脚本执行时间 = ' . (($end_time - $start_time) * 1000 * 1000) . ' 微秒';
    

    相关文章

      网友评论

          本文标题:PHP实现斐波那契数列

          本文链接:https://www.haomeiwen.com/subject/bcsjgctx.html