递归函数其实就是自己再调用自己,直到条件终止的时候结束
主要还是来剖析一下这个递归函数的执行过程吧
1.首先代码的执行顺序是从上往下,从左往右的顺序。
首先拿到代码不能被自己的思维所带进坑(想象一下你就是机器,你应该咋弄嘞)
例如累加的例子,搞简单点就从1加到10吧累加,正常来说如果用for循环的话当然可以,如果是递归的话来看看咋弄(我的思路)
$a = 10;
function sum($a){
$total +=$a;
return $total;
}
echo sum($a);
1.定义一个函数,首先调用的话需要返回值,这个一定OK,此时$total 肯定是10了没跑了。
2.如果是这样的话,你会发现他返回的永远都是10
$a = 10;
function sum($a){
$total += $a;
/*
* 此时得要往后面加呀
* 10 + 9
* 9的话就是这个函数sum(9)不就OK;来个判断
*/
if($a > 1){
如果$a 是大于1 的话,那么继续加则还得用sum
sum(--$a);
}
return $total;
}
此时你就不得不说一下php设计时候针对函数作用域的问题 因为函数的变量他是局部的,也就是说我判断里面的sum跟外头的这个sum其实就俩回事
<?php
$a = 10;
function sum($i){
//这里$a 还是$i都无所谓哈,是函数的参数,跟外头的没关系
$total += $i;
if($i >1){
sum(--$i);
}
return $total;
}
echo sum($a);
//来说下这个
//sum(--$i);因为程序是按顺序执行
//此时应该是sum(9)
//也就是说此时
function sum(9){
$total += 9;
if(9 > 1){
sum(8);
}
return $total;
}
function sum(9){
$total += 8;
if(8 > 1){
sum(7);
}
return $total;
}
但是这个返回的值没卵用啊现在咋办。执行最终结果还是返回了10
3.所以得把之前的加上去就OK,搞定。
<?php
$a = 10;
function sum($i){
$total += $i;
if($i >1){
$total += sum(--$i);
}
return $total;
}
echo sum($a);
https://blog.csdn.net/weixin_44088587/article/details/111309262 我的这篇删除非空目录也会涉及到递归的用法
https://blog.csdn.net/weixin_44088587/article/details/111353206 我的这篇复制目录也会涉及到递归的用法