函数的递归调用(专题)
递归调用:函数的递归调用,就是函数在执行的时候自动调用自己!
功能:当我们把一个大问题按照某种解决方案细化为若干个小问题的时候,结果我们发现这些小问题的解决方案又和前面大问题的解决方案是一样的!
语法格式: function 函数名(){
//递归出口(不要忘了,不然进入死循环)
//调用其他函数;
函数名();
}
函数名();
所以,函数的递归有两个要素:
1, 递归出口:就是什么时候停止自己调用自己
2, 递归点:就是什么时候开始自己调用自己
案例:斐波那契数列,即前两项已知,从第三项开始,每一项都是前两项的和!
若前两项为1,则思路如下
1 (n<=2) (出口)
F(n)
F(n-1)+F(n-2) (n>=2) (递归点)
function f($n){
//递归出口
If($n == 1||$n == 2){
return 1;
}
//递归点(由于就剩下一种结果了,我们可以直接使用即可)
$s=f($n-1)+f($n-2);
return $s
}
echo f($_GET[‘n’]);
回味一下过程:
特点:简单,但消耗内存,会占用大量的内在空间,当然运行较大的数会造成速度很慢
优化过程,就是一个步骤的重复执行,降低空间,引用我们的迭代思想
迭代思想:从前往后来解决问题,体现在代码上,其实就是一个步骤的重复的执行,也就是循环结构!
做算法的过程中,我们首先要把思想逻辑写一下
这样可以直接写代码了,甚至一气呵成
<?php
Function f($first,$second,$n){
//已知前两项
$before1 = $second;
$before2 = $first;
//条件判断前两项
if($n == 1){
return $first;
}
if($n == 2){
return $second;
}
for($i=3;$i<$n;$i++){
$num = $before1 + $before2;
$ before2=$before1;
$before1=$num;
}
Return $num
}
Echo f(1,1,$_GET[‘n’]);
算法思想并不是一朝一夕的,多加练习并总结,才是王道。