<?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