斐波那契数列的计算:有以下一个数列:1,1, 2, 3, 5, 8, 13, 21,....... 其规则是:前两个已知(即1和2),从第3个开始,其值为其左边两个值的和(此数列称为斐波那契数列)。定义一个函数,该函数能够求出该数列的任意第n个数的值。
function fibonacci($n){ //找出口:何时结束递归的调用 if($n==! || $n==2) return 1; //计算其余项 //找入口:何时开始递归调用 return fibonacci($n-1)+fibonacci($n-2); /**思考 *return是否能够使用echo替换 *不能够,由于return 结束函数的调用 *须要返会给下次递归调用使用 **/ } $start=microtime(true);//开始计时 echo fibonacci(35); $end=microtime(true);//函数调用结束在计时 echo '计算耗时'.($end-$start).'秒';//4.9秒 //递归每次调用时,没有当即结束函数的调用,内存没有释放,等到后面计算出结果,才从后面开始释放内存
思考问题:
1.递归:php
2.return是否能够使用echo替换函数
function fibonacci($n){ if($n==1 ||$n==2) return 1; //其余项 //第三项--> //假设求第七项,从第三项考试逐个计算 //本次计算做为下次计算的条件使用 //定义初始条件 //前两项做为基本条件 $first=1; $secont=2; for($i=3;$i<=$n;$i++){ //之间两项之和 $res=$first+$second; //为后续计算作准备 //下次计算的第一项来自本次计算计算的第二项 $first=$second; //下次计算的第二项来自本次计算的结果 $second=$res; } //循环结束 获得结果 return $res; } $start=microtime(true); echo fibonacci(135); $end=microtime(true); echo '计算耗时:'.($end-$start);//4.315秒,比递归效率高几千万倍
结论:迭代的运行效率比递归高不少,能用迭代解决就别用递归,也就是说先考虑迭代再考虑递归。code