我們在之前的文章中給大家介紹了關於php遞歸函數中的回傳值問題,那麼我們今天再給大家介紹下一個關於php遞迴函數中的一個邏輯問題,這個問題很多小夥伴都會出現的,今天就帶大家解析下!
首先,我們得知道遞歸函數是什麼東西,通俗來講也就是自己呼叫自己本身的函數。
現在需要設計一段程式碼,解決1到10疊加的問題。
程式碼A:
<?php //递归函数 $num=10; function add($sum){ static $tot; if($sum>=1){ $tot+=$sum; add(--$sum); }else{ return $tot; } } echo add($num); ?>
程式碼B:
<?php //递归函数 $num=10; function add($sum){ static $tot; if($sum>=1){ $tot+=$sum; return add(--$sum); }else{ return $tot; } } echo add($num); ?>
A中列印不出想要的結果,B中可以實作。而A和B程式碼中唯一的差異就是在if中加入了一個return。
下面就開始分析整個遞歸的過程,完全可以去看看盜夢空間加深理解了:(以不能實現的A代碼為例)
1.將10帶入函數中,if語句判斷之後,$tot開始疊加。
2.這裡重點來了:將參數減一之後重新帶入函數中。 (沒有回傳值!!!)
3.接著上面的過程一直循環,一直到$sum=1,這從外到內,由10到1,這10層的循環都沒有回傳值。
4.$sum=0的時候,要求有回傳值。
就好像,在盜夢空間中,主角在11層夢境中醒來,但前面10層的夢境都處於睡眠階段。這主角你覺得醒的過來嗎,明顯不可能。他只能卡在第11層夢境,永遠醒不過來。
唯一能讓主角醒過來的辦法也就是他的每一層夢醒都醒過來,一直回到現實生活中。而相對與A代碼,B代碼則從第一層開始就要求有回傳值,一直到11層都要有回傳值。所以11層醒過來之後激活了第10層,然後一層一層的激活,最後就順利醒過來了,這個最後的結果也就正確輸出了。
總結:
透過上述的php遞迴函數中的邏輯問題,許多小夥伴可能都會感受跟自己遇到的一樣的,希望可以透過上面的兩段程式碼幫你解決你的問題!
相關推薦:
以上是php遞歸函數中一個邏輯問題的解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!