递归
什么是递归?
回答
自己调用自己就是递归
引用百科的一个故事去理解:
从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’”
递归需要几个条件
1,递归必须 要有边界条件,也就是递归出口(退出递归)
2,递归前进段和递归返回段,也就是最后得到的值
3,当边界条件(递归出口)不满足时,递归前进;当边界条件(递归出口)满足时,递归返回。
举个递归小例子,比如,
张三去和李四借钱,李四说你等一下,我去找王五借给你,
然后李四去找王五借钱,王五说你等一下,我去找赵六借给你,
最后王五找赵六借钱,赵六借给了王五。(这里就是递归出口)
说了这么多,上代码
<?php
function recursion($i)
{
if($i > 10){
return $i;
}else{
$i++;
recursion($i);
}
}
var_dump(recursion(8));
?>
看到这里,请问最后输出的是几呢?别着急往下看,你猜猜是几?
输出 NULL
很奇怪吧,答案不应该是11吗?
好的让我们回到那个小故事。最后王五找赵六借钱,赵六借给了王五。(这里就是递归出口)。王五拿到钱之后应该干嘛呢?应该把钱给李四,对吗?
<?php
function recursion($i)
{
if($i > 10){
//在这里就好比赵六把钱借给了王五
return $i;
}else{
$i++;
recursion($i);
}
}
然后程序继续执行
function recursion($i)
{
if($i > 10){
return $i;
}else{
$i++;
//这时的王五拿这钱,站在原地不知道该干嘛了~~~
recursion($i);
}
}
那么如何让王五把钱给赵四呢
function recursion($i)
{
if($i > 10){
return $i;
}else{
$i++;
//在这里加个return
return recursion($i);
}
}
var_dump(recursion(8));
输出 11
?>