前回の記事で
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 サイトの他の関連記事を参照してください。