迭代、递归解决斐波纳挈数列问题
2014-06-21 18:40
239 查看
<?php /** * @param $n int 第N项 * * @return int 第N项的值 */ function f($n) { //已知条件 $before_1 = 1;//前一项(初始化时就是第二项) $before_2 = 1;//前二项(初始化时就是第一项) //判断是否是第一项或第二项 if($n == 1) { return $before_2; } elseif ($n == 2) { return $before_1; } //计算第$n项,从第三项开始,到第$n项,逐一计算 for($i=3; $i<=$n; ++$i) { $now = $before_1 + $before_2;//得到当前项$now //切换前一项,和前二项,整体向后移动 $before_2 = $before_1; $before_1 = $now; } return $now; } echo f($_GET['n']); //echo f(2); //echo '<br>'; //echo f(5); //echo '<br>'; //echo f(10);
<?php //递归的方案解决斐波纳挈数列 /** * @param $n int 第N项 * * @return int 第N项的值 */ function f($n) { //递归出口,前两项已知 if($n == 1) { return 1; } elseif ($n == 2) { return 1; } //利用公式完成 //递归点,每项前两项之和 return f($n-1) + f($n-2); } echo f($_GET['n']); //echo f(5);//5 //f(5) = return f(4) + f(3); // = return (return f(3) + f(2)) + f(3); // = return (return (return f(2) + f(1)) + f(2)) + f(3); // = return (return (return 1 + f(1)) + f(2)) + f(3); // = return (return (return 1 + 1) + f(2)) + f(3); // = return (return 2 + 1) + f(3); // = return 3 + (return f(2) + f(1)); // = return 3 + (return 1 + f(1)); // = return 3 + (return 1 + 1); // = return 3 + 2; // = return 5; // //echo '<br>'; //echo f(10);//55
相关文章推荐
- 非递归解决斐波纳挈数列问题
- 回溯法解决0_1背包问题(迭代和递归)
- Struts迭代问题解决:如何在一行显示多个记录(同一字段)
- 递归与非递归解决组合问题
- 递归思路解决的四则运算问题,C语言
- 利用递归思想解决问题
- 数据结构之非递归解决0-1背包问题
- 非递归解决组合问题
- 终于知道递归解决什么样的问题了,指数级问题(或者说无法简单的用for循环就能完成的问题)。想通了为啥图的优先和广度优先搜索的时间复杂度是o(n+e)了,而且一分不差。
- 游标递归解决树形节点删除问题
- 用汇编与c解决递归问题之比较
- 递归完美解决"傻子造成的问题"
- 斐波那契数列的递归,迭代(循环),通项公式三种实现
- 在C# 中不使用递归解决“数独”问题的一种方案
- 备忘录和递归解决背包问题
- 非递归解决组合问题
- Fibonacci數列(用此数列可以解决兔子生娃的问题)
- 斐波那契数列实现--递归,迭代,数组,队列
- 递归分治解决全排列问题
- 用递归解决问题