ホームページ > バックエンド開発 > PHPチュートリアル > PHP の再帰関数に関する一般的な論理問題

PHP の再帰関数に関する一般的な論理問題

WBOY
リリース: 2016-06-23 13:51:23
オリジナル
860 人が閲覧しました

まず第一に、再帰関数とは何であるかを知る必要があります。一般的に、それは独自の関数を呼び出すことを意味します。

ここで、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 が追加されていることです。

再帰プロセス全体の分析を始めましょう。 Inception を見て理解を深めましょう: (実装できないコードを例として取り上げます)

1. if ステートメントが判定された後、関数に 10 を入れます。 , $tot はスタッキングを開始します。

2. ここで重要な点があります。パラメーターを 1 つ減らして関数に再導入します。 (戻り値なし!!!)

3. 次に、上記のプロセスは $sum=1 になるまで、外側から内側、10 から 1 までループし続けます。これらの 10 レベルのループには戻り値がありません。

4. $sum=0の場合、戻り値が必要です。

それは、『インセプション』で、主人公は夢の 11 階で目覚めますが、その前の 10 階の夢はすべて睡眠段階にあるようなものです。この主人公は目覚めることができると思いますか?それは明らかに不可能です。彼は夢の国の 11 レベルに閉じ込められるだけで、決して目覚めることはありません。

主人公が目覚める唯一の方法は、夢のあらゆるレベルから目覚めて現実の生活に戻ることです。 Aコードに比べて、Bコードは第1階層から第11階層までの戻り値が必要です。したがって、11 番目の層が起動した後、10 番目の層がアクティブになり、さらに層ごとにアクティブになり、最終的にスムーズに起動し、最終的な結果が正しく出力されました。

『インセプション』で再帰関数は簡単に説明できる、と彼らが言ったのも不思議ではありません。考えてみれば当然です。

残っているのは、それをより深く理解することだけです。確かに、最初は少しめまいがするでしょう。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート