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项:

 

posted @ 2016-07-28 14:00  z2168465  阅读(642)  评论(0)    收藏  举报