递归,阶乘

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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏