递归,阶乘
1、以最快的速度求n的阶乘!
代码:
<?php
//阶乘
function f($n){
if($n == 1){
return 1;
}else
return f($n-1)*$n;
}
//echo f(10);
echo f($_GET[‘n’]);
2、如何用循环的方法改写斐波那契数列!
代码:
<?php
function f($a,$b,$n){
//前两项已知
$before1 = $a;
$before2 = $b;
if($n == 1){
return $a;
}
if($n ==2){
return $b;
}
//从第三项开始,求到第n项
for($i=3;$i<=$n;$i++){
$sum = $before1 + $before2;
$before2 = $before1;
$before1 = $sum;
}
return $sum;
}
echo f(1,1,$_GET[‘n’]);
3、递归调用
斐波那契数列:前两项已知,从第三项开始,每一项都是前两项之和!
1 1 2 3 5 8……思考:如何求得第n项的值?
1 (n<=2)
f(n)=
f(n-1) + f(n-2) (n>=3)
递归的两个要点:
1, 递归的出口:就是指什么时候停止递归调用
2, 递归点:就是指什么时候开始使用递归调用
对于上面的问题:当n=1或n=2的时候,停止调用自己,也就是递归的出口
当n>=3的时候,开始使用递归
在写递归调用的时候,注意,先写递归的出口,再写递归点!
代码:
/**
*斐波拉契数列
*@param int $n 数列的项数
*@return int $s 数列的最后一项的值
*/
function f($n){
if($n ==1 || $n ==2){
return 1;
}
$s = f($n-1)+f($n-2);
return $s;
}
//调用并输出
echo f($_GET[‘n’]);
//echo f(30);
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 chaofa_vip@126.com
文章标题:递归,阶乘
文章字数:350
本文作者:Hechaofa
发布时间:2016-03-29, 11:13:47
最后更新:2020-09-30, 15:43:57
原始链接:https://chaofavip.github.io/2016/03/29/php/algorithm/digui/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。