ホームページ  >  記事  >  バックエンド開発  >  PHP 再帰関数の論理問題の解決策

PHP 再帰関数の論理問題の解決策

黄舟
黄舟オリジナル
2017-11-13 09:50:341395ブラウズ

前回の記事で

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

再帰プロセス全体の分析を始めましょう。 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 再帰関数における上記の論理的な問題を通じて、多くの友人が同じように感じているかもしれません。上記の 2 つのコードが問題の解決に役立つことを願っています。

関連する推奨事項:

PHP再帰関数の戻り値問題の解決策


PHP再帰関数を実装する3つの方法の分析


PHP 再帰関数の使用例

PHP 再帰関数を効果的に使用するにはどうすればよいですか? PHPの再帰関数の典型的な例

以上がPHP 再帰関数の論理問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。