首頁  >  文章  >  後端開發  >  php遞歸函數中一個邏輯問題的解決

php遞歸函數中一個邏輯問題的解決

黄舟
黄舟原創
2017-11-13 09:50:341396瀏覽

我們在之前的文章中給大家介紹了關於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遞迴函數實作的三種方式分析


php遞迴函數的使用範例

#php遞迴函數怎麼用才有效? php遞歸函數典型範例

#

以上是php遞歸函數中一個邏輯問題的解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn