PHP有关函数的编程思想(递归思想,递推(迭代)思想)
递归思想——递归函数
递归函数,就是:在一个函数内部调用它自己的函数!
先考察一个最简单的函数:
function f1( $n ){
echo $n;
$n++;
f1( $n );
}
f1(1);
从这个简单的函数可以看出,该函数调用是“永无止境”的(没完没了),最终会将内存消耗完毕。
显然,这不是一个正常的做法!
实用的递归函数是:能够控制这个调用的过程中,会在某个时刻(条件下)停下来!
实例演示:
求5的阶乘。
数学上,有这样两个有关阶乘的基本规则:
1,n的阶乘,是n-1的阶乘,乘以n的结果。
2, 1的阶乘是1;
现在,假设,有一个函数,该函数“能够”计算n的阶乘。
function jiecheng( $n ){
//.....
}
$v1 = jiecheng(8); //结果应该是8的阶乘
$v2= jiecheng(5); //结果应该是5的阶乘

递归思想总结:
当面对一个“大问题”,该大问题可以经由该问题的同类问题的“小一级问题”而经过简单计算获得,而且,可以获知(已知)这类问题的“最小一级问题”的答案。则,此时就可以使用递归方法来解决该问题。
则此时该函数的基本模式是:
function digui( $n ){
if(是最小一级){
return 已知的答案;
}
$jieguo = 对 digui($n-1) 进行简单运算;
return $jieguo;
}
课间练习:
以下数列:1, 1, 2, 3, 5, 8, 13, .......
说明:
第1项是1,第2项也是1(都是已知);
其他项,是其前两项的和;
求:第20项;
function shulie( $n ){ //把n理解地第几项;
if( $n== 1 || $n == 2 ){
return 1;
}
$jieguo = shulie($n-2) + shulie($n-1);
return $jieguo;
}
$v1 = shulie( 20) ;
递归思想图示:

递推(迭代)思想
也同样思考这个问题:
求5的阶乘:
先演示最初级的做法:

将上述代码,使用一个变量,也同样能完成:

然后,将上述代码的规律性体现出来——就是使用循环:


递推总结:
如果要求一个“大问题”,且该问题有如下2个特点:
1,已知该问题的同类问题的最小问题的答案。
2,如果知道这种问题的小一级问题的答案,就可以轻松求得其“大一级”问题的答案,并且此问题的级次有一定的规律;
则此时就可以使用递推思想来解决该问题,代码模式为:
$qian = 已知的最小一级问题的答案;
for( $i = 最小一级的下一级; $i <= 最大一级的级次; ++$i){
$jieguo = 对 $qian 进行一定的计算,通常需要使用到$i;
$qian = $jieguo;
}
echo “结果为:” . $jieguo;
递推思想图示:

通常,如果一个问题,既能使用递归算计解决,又能使用递推算法解决,则应该使用递推算法。
下面用递推思想来完成刚才的数列题:
以下数列:1, 1, 2, 3, 5, 8, 13, .......
求第20项:

浙公网安备 33010602011771号