首页 > Web开发 > 详细

斐波那契数列(php实现)

时间:2020-02-15 18:51:20      阅读:71      评论:0      收藏:0      [点我收藏+]

描述

斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、34...

规则 : 有N个数,第i个数的值 N(i)= N(i-1) + N(i-2)

需求: 给出下标i ,求第i 的个数的值

例如 : 2 = 1+1
3 = 2+1
5 = 3+2
8 = 5 + 3
...

用php写

递归求解

function get($index){
    if ($index < 3 )return 1;
    return get($index-1)+get($index-2);
}
echo get(10);

指数级的时间复杂度

优化解法

$n_1 = 1;
$n_2 = $n_1;
$n_3  =$n_1 + $n_2;
$n_4 = $n_3 + $n_2;
$n_5 = $n_4 + $n_3;
.....

n1,n2 是固定的1,
n3是n1+n2,计算了1次

n4 是n3 + n2 计算了2次

n5 是 n4+ n3 计算了3次

那么第n个数就是第n-1 个数+第n-2个数,计算了n-2次.这样复杂度就变成了O(n),可以写一个for循环。我们需要保留第n-1个数的值 NUM(n-1)和第n-2个数的值NUM(n-2)。

function getF($index)
{
    if ($index < 3) return 1;
    $n_1 = 1;
    $n_2 = $n_1;
    for ($i = 0; $i < $index - 2; $i++) {
        $last = $n_1; // 保存上一次运算后 第n-2个数的值
        $n_1 = $n_2; // 本次操作结束后 第n-1个数的值
        $n_2 = $n_2 + $last; // 这里是第n-2个数的值 + 上一次 第n-1个数的值
    }
    return $n_2;
}

斐波那契数列(php实现)

原文:https://www.cnblogs.com/dujianjun/p/12313012.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!