您现在的位置是:首页 > PHP > 关于递归的理解错误 网站首页 PHP
关于递归的理解错误
关于递归呢,我以前其实也有很多的疑惑,总是跳过了,其实问题很大,是什么呢,在这里解释下
上面的代码输出结果呢是这样的:1234567899876543210;
和我预想的不一样,我觉得应该输出的是:1234567899 才对嘛, 为什么这么想,我来说下我的思路
首先这里一个定义了一个静态的变量$count,静态就是说只有在第一次加载这个方法的时候会被初始化,再次进这个test()方法的时候会保留上次的值,当然仅仅当前未刷新的页面下,这是前提啊
然后我的要求就是每次执行的时候$count加一,
下面是进入判断语句,判断这个$count 的值在小于10的时候执行,在里面使用递归的方式,说白了就是再次执行当前函数,一直到这个变量大等于9的时候,因为等于9,在执行test()之后就加加了嘛,变成10了呀。
然后就是跳出这个if,实现下面的$count--;在输出这个$count值,
这样不就最后应该多输出一个9吗?
----------------------------------------------------然而结果告诉世界我并不是你想的那么天真-------------------------------------------------------
第一点,我其实判断错了一个思路,程序呢是从上向下执行的,那么我理解的就是递归的意思是返回去执行当前函数?还是相当于在下面重新加载了一次这个test()方法呢?
答案就是相当于在下面执行了一次test()方法,为什么这么说,我把下面的代码补齐就明白了
function test(){
static $count =0;
$count++;
if($count<10){
echo $count;
test();//这这里执行并不是回到上面,相当于把test拿下来执行了
这里这句就相当重新写了一次test方法,我来写一下
static $count =0;//静态的变量不执行在初始化了
$count++;//加一之后就是2了;
if($count<10){
echo $count;这个就该是2
test();//这里一样和上面在重新写一次,太多了我就不一一写了
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。这是很多的意思
}
$count--;
echo $count;
}
$count--;
echo $count;
}
test();
这里也就解决了我最开始的问题,为什么会输出那么多,最后呢在看下最后的那个输出,其实理解了这个就是很简单了
同样我写下这个代码。就只写最后$count=9之后的
}//等于9之后在访问这个test()方法++变成10了 ,就不进入那个if,那么重点是这个不进入if就该向下执行,那么下面是啥呢,是这个
$count--;//又变回9了
echo $count;//这里该输出9;
}/再向下执行,
$count--;//变成8
echo $count;//再次输出8
。。。。。。。。。。。。一直返回到第一次进入if的地方,以$auont=1进入的,出来就是下面这样
}/再向下执行,
$count--;//变成0
echo $count;//再次输出0
所以最后的结果会是1234567899876543210;
最后还是做个总结吧,代码这个东西,有时候并不是做出来了就理解了,一定要细心观察,多读点书也好,
人嘛思想总是在变,不多学点怎么知道这些年来理解的事务有没有错误呢,有没有歧义呢,或者说叫‘知其然,不知其所以然’
仅仅是自己的理解,也许过段时间又回来纠错呢,本篇暂终。
打赏本站,你说多少就多少
上一篇:好累,该睡了,晚安