费波纳切(Fibonacci)数列的前N项和公式(PHP版)三种算法的比较
2011-04-19 15:08
1036 查看
大家都知道费波纳切数列1,1,2,3,5,8,13(第三项是前两项的和),它的通项公式为:f(x)=f(x-1)+f(x-2),f(0)=0,f(1)=1
我们用PHP来求f(40)吧
方式一:
递归。最单纯的递归。
我们对方式一进行改进:
方式一的主要问题在于: 求f(y)的时候要去计算f(y-1) f(y-2)….直到f(3) f(2) (1) f(0), 在这个过程中,为了计算出f(y-2) 的值,又要去重复计算f(y-3) f(y-4)…直到f(3) f(2) f(1) f(0) ,显然有了太多的重复计算了。
那么我们就加上缓存吧
很牛了吧,速度提升了N个数量级。但是这还不是最快的。
你想一下,我们递归了多少次, f2 被调用了多少次?这次用循环试试看吧
方法三:
又快了一个数量级!
看来还是循环最快啊。
转自:http://www.zhaokunyao.com/archives/154 感谢!!
我们用PHP来求f(40)吧
方式一:
递归。最单纯的递归。
function f($i) { if ($i==0) return 0; if ($i==1) return 1; return f($i-1) + f($i-2); }
$start = microtime(true); print f(40); // 我的电脑,PHP超时了,还没计算出来,估计是要2-3分钟的 $end = microtime(true); print $sum. ":" .($end-$start)."<BR>/n"; 这个显然是太慢了。
我们对方式一进行改进:
方式一的主要问题在于: 求f(y)的时候要去计算f(y-1) f(y-2)….直到f(3) f(2) (1) f(0), 在这个过程中,为了计算出f(y-2) 的值,又要去重复计算f(y-3) f(y-4)…直到f(3) f(2) f(1) f(0) ,显然有了太多的重复计算了。
那么我们就加上缓存吧
$cache = array(); function f2($i) { global $cache; if ($i==0) $cache[$i] = 0; if ($i==1) $cache[$i] = 1;
if (!isset($cache[$i])) $cache[$i] = f2($i-1) + f2($i-2); return $cache[$i]; }
$start = microtime(true); print f2(40); //0.000317096710205 秒 $end = microtime(true); print $sum. ":" .($end-$start)."<BR>/n";
很牛了吧,速度提升了N个数量级。但是这还不是最快的。
你想一下,我们递归了多少次, f2 被调用了多少次?这次用循环试试看吧
方法三:
$a = 0; $b = 1;
$start = microtime(true);
for ($i=0; $i<40;$i++) { $sum = $a+$b; $b = $a; $a = $sum; } $end = microtime(true);
print $sum. ":" .($end-$start)."<BR>/n"; //2.59876251221E-5 秒
又快了一个数量级!
看来还是循环最快啊。
转自:http://www.zhaokunyao.com/archives/154 感谢!!
相关文章推荐
- [转]C#算法 Fibonacci费波纳数列
- Java基础三种常见交换算法的比较
- BM、GC、SGBM三种算法的比较和BM在OpenCV3下的参数设置
- 三种方法求解Fibonacci(斐波那契)数列
- ASP、JSP、PHP 三种技术比较
- ASP、JSP、PHP三种技术比较
- PHP的三种安装模式的比较
- 利用Python实现Fibonacci序列算法的三种方法
- IIS下PHP的三种配置方式比较
- 三种中文分词算法优劣比较
- ASP、JSP、PHP三种技术比较
- JSP建站优势>ASP、JSP、PHP 三种技术比较
- PHP三种处理POST数据的比较
- 多校第十场 HDU 3936 FIB Query(fibonacci 数列的性质 ,及Ologn 矩阵加速乘算法)
- BF,KMP,BM三种字符串匹配算法性能比较
- ASP、JSP、PHP 三种技术比较
- 网络流三种算法及比较
- HDOJ--1869--六度分离(用三种算法写的,希望能比较出来他们之间的区别)
- python实现经典算法(2):Fibonacci(斐波那契)数列
- PHP5.2 与 PHP5.3 垃圾回收算法之间的比较