您的位置:首页 > 其它

迭代、递归解决斐波纳挈数列问题

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: