您现在的位置是:首页 > PHP > 关于递归的理解错误 网站首页 PHP

关于递归的理解错误

Tom2016-05-26 2292人围观
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;


最后还是做个总结吧,代码这个东西,有时候并不是做出来了就理解了,一定要细心观察,多读点书也好,

人嘛思想总是在变,不多学点怎么知道这些年来理解的事务有没有错误呢,有没有歧义呢,或者说叫‘知其然,不知其所以然’


仅仅是自己的理解,也许过段时间又回来纠错呢,本篇暂终。

打赏本站,你说多少就多少

文章评论