前回の記事で
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の再帰関数の典型的な例
以上がPHP 再帰関数の論理問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。