上QQ阅读APP看书,第一时间看更新
4.7 递归与迭代
我们经常会遇到这样的情况:在面临一个庞大的问题时,需要把这个庞大的问题拆分成各个细小的单元,解决了每个细小单元的问题,这个庞大的问题便迎刃而解了。递归与迭代就是这种思想的体现。
1.递归
递归就是程序调用自身、函数不断引用自身,直到引用的对象已知。构成递归需满足以下两个条件:
● 子问题需与原始问题为同样的事,且更为简单。
● 不能无限制地调用本身,必须有一个出口,化简为非递归状况处理。
例如,斐波那契数列:1,1,2,3,5,8……
斐波那契数列的特点是第0位(在计算机中习惯以0开始计数)和第1位的数字都是1,从第2位开始,当前数字的值是前两位数值之和,可以用如下的公式表示:
f(0) = 1
f(1) = 1
f(n) = f(n-1) + f(n-2) {n>1}
用PHP实现递归求斐波那契数列的代码如下:
<? php function readd($n){ if($n>2){ $arr[$n]=readd($n-2)+readd($n-1); // 递归调用自身 return$arr[$n]; }else{ return 1; } } echo readd(30); ?>
readd()函数封装了求斐波那契数列的方法,向函数中传递不同的数字将会求出对应位置的数列的值。
2.迭代
迭代就是利用变量的原值推算出变量的一个新值。下面用一个简单的例子说明迭代:
<? php function diedai($n){ for ($i=0, $j=0;$i<$n;$i++){ $j=$j+$i; } return$j; } echo diedai(4); ?>