递归思想(递归函数):
递归思想的一个基本形式是在一个函数中,有至少一条语句,又会去调用该函数自身。(求n!问题用递归;杨辉三角问题用过递归…)
funtion digui($n){
if($n==1){
return 1;
}
return digui($n-1)*$n;
}
$a=6;
echo "{$a}的阶乘为:{$a}!=".digui($a);
结果为:
递归思想总结:
为了解决一个“大”问题,根据现实逻辑,该问题可以通过比它小一级的同类问题的答案得到。小一级的问题又可以根据更小一级的问题的答案得到。以此类推,直到“最小一级问题”的答案是一个已经的。
递归思想图例:
递推思想(迭代思想):
递推思想和递归思想很相似,都是需要知道“最小一级问题”的答案。
我们先来看递推思想图例:
区别:
对比图例后我们可以发现递归和递推是有所差异的,递推的整体思想是从小到大,而递归的整体思想是从大到小,再从小回到大。简单说,递推是更新变量的旧值,递归是在函数中调用函数自身。
举例: 求斐波那契数列的第n项的值(递推最经典的问题)
斐波那契数列的规律:1, 1, 2, 3, 5, 8, 13, 21…(最前的两个数都为1,从第3位开始,后面每位数为前两位数的和)
function fbnq($n){
$n1=1;//斐波那契数列第一项初始为1
$n2=1;//斐波那契数列第二项初始为1
$result=0;
for($i=3,$i<=$n;++$i){
$result=$n1+$n2;
$n1=$n2;//更新旧值
$n2=$result;//更新旧值
}
return $result;
}
$a=fbnq(7);//求斐波那契数列第7个数
echo "斐波那契数列第7项为:".$a;
递归和递推思想总结:
很多问题,递归和递推都能解决。
有些问题只能用递归。
如果两种方法都能解决,推荐使用递推,递推的效率高。