摘要:今天一小伙伴寫了一個遞歸,可以輸出要取的值,的卻總是,寫了一個簡單的測試復原一下問題。結(jié)果如下代碼思路看上去很簡單,就遞歸,不滿足條件就返回的值。
今天一小伙伴寫了一個遞歸,echo可以輸出要取的值,return的卻總是null,寫了一個簡單的測試復原一下問題。
function test($i) { $i -= 4; if ($i > 3) { echo $i; test($i); } echo $i; return $i; } $a=test(30); var_dump($a);
結(jié)果如下:
261014182226 int 26
代碼思路看上去很簡單,i>3就遞歸,不滿足條件就返回i的值。問題就出在歸的過程,最后return的值將會是第一次執(zhí)行這個函數(shù)時(也就是最外層)的值30-4=26。
下面是修改后的遞歸函數(shù):
function test($i) { $i -= 4; if ($i > 3) { return test($i); }else{ return $i; } } $a=test(30); var_dump($a);
結(jié)果是
int 2
當不滿足條件時,返回不滿足條件的$i,然后這個這個$i將會是遞歸回去的唯一返回值。如果還是不太明白,下面就以一層遞歸解釋其中到底發(fā)生了什么:
function test($i) { $i -= 4; if ($i > 3) { return test($i); }else{ return $i; } } $a=test(10);
上面的程序可以理解為:
function test(10) { $i -= 4; if ($i > 3) { //先執(zhí)行里面的函數(shù),接收到下面函數(shù)的返回值2 ,最終返回2 return function test(6) { $i -= 4; if ($i > 3) { return test($i); }else{ //此時$i是2,這個函數(shù)返回2到上一層函數(shù) return $i; } } $a=test(10); }else{ return $i; } } $a=test(10);
三層四層以上就可以自己去想象了,不行就自己動手這樣替換遞歸的函數(shù)會更好理解一些。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22198.html
摘要:終止條件遞推公式遞歸的分類通過做大量的題,根據(jù)遞歸解決不同的問題,引申出來的幾種解決和思考的方式。我們通過層與層之間的計算關系用遞推公式表達出來做計算,經(jīng)過層層的遞歸,最終得到結(jié)果值。 showImg(https://segmentfault.com/img/remote/1460000019222330); 前言 幾個月之前就想寫這樣一篇文章分享給大家,由于自己有心而力不足,沒有把真...
摘要:鏈表與遞歸已經(jīng)從底層完整實現(xiàn)了一個單鏈表這樣的數(shù)據(jù)結(jié)構(gòu),并且也依托鏈表這樣的數(shù)據(jù)結(jié)構(gòu)實現(xiàn)了棧和隊列,在實現(xiàn)隊列的時候?qū)︽湵磉M行了一些改進。計算這個區(qū)間內(nèi)的所有數(shù)字之和。 showImg(https://segmentfault.com/img/remote/1460000018597053?w=1832&h=9943); 前言 【從蛋殼到滿天飛】JAVA 數(shù)據(jù)結(jié)構(gòu)解析和算法實現(xiàn),全部文...
摘要:鏈表與遞歸已經(jīng)從底層完整實現(xiàn)了一個單鏈表這樣的數(shù)據(jù)結(jié)構(gòu),并且也依托鏈表這樣的數(shù)據(jù)結(jié)構(gòu)實現(xiàn)了棧和隊列,在實現(xiàn)隊列的時候?qū)︽湵磉M行了一些改進。計算這個區(qū)間內(nèi)的所有數(shù)字之和。 showImg(https://segmentfault.com/img/remote/1460000018597053?w=1832&h=9943); 前言 【從蛋殼到滿天飛】JAVA 數(shù)據(jù)結(jié)構(gòu)解析和算法實現(xiàn),全部文...
摘要:前言相信大家在面試或者工作中偶爾會遇到遞歸算法的提問或者編程,我們今天來聊一聊從數(shù)學歸納法到理解遞歸算法。這種廣義的數(shù)學歸納法應用于數(shù)學邏輯和計算機科學領域,稱作結(jié)構(gòu)歸納法。 showImg(https://img-blog.csdnimg.cn/20190426221838971.gif);showImg(https://img-blog.csdnimg.cn/20190429222...
摘要:那么,有了循環(huán),為什么還要用遞歸呢在某些情況下費波納切數(shù)列,漢諾塔,使用遞歸會比循環(huán)簡單很多很多話說多了也無益,讓我們來感受一下遞歸吧。 遞歸介紹 本來預算此章節(jié)是繼續(xù)寫快速排序的,然而編寫快速排序往往是遞歸來寫的,并且遞歸可能不是那么好理解,于是就有了這篇文章。 在上面提到了遞歸這么一個詞,遞歸在程序語言中簡單的理解是:方法自己調(diào)用自己 遞歸其實和循環(huán)是非常像的,循環(huán)都可以改寫成遞歸...
閱讀 3107·2021-02-22 17:12
閱讀 728·2019-08-30 15:55
閱讀 3106·2019-08-30 15:54
閱讀 1398·2019-08-29 16:56
閱讀 1869·2019-08-29 15:13
閱讀 1730·2019-08-29 13:19
閱讀 610·2019-08-26 13:40
閱讀 2829·2019-08-26 10:26