まず第一に、再帰関数とは何であるかを知る必要があります。一般的に、それは独自の関数を呼び出すことを意味します。
ここで、1 から 10 までの重ね合わせの問題を解決するコードを設計する必要があります。
コード A:
<?php //递归函数 $num=10; function add($sum){ static $tot; if($sum>=1){ $tot+=$sum; add(--$sum); }else{ return $tot; } } echo add($num);?>
<?php //递归函数 $num=10; function add($sum){ static $tot; if($sum>=1){ $tot+=$sum; return add(--$sum); }else{ return $tot; } } echo add($num);?>
再帰プロセス全体の分析を始めましょう。 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 番目の層がアクティブになり、さらに層ごとにアクティブになり、最終的にスムーズに起動し、最終的な結果が正しく出力されました。
『インセプション』で再帰関数は簡単に説明できる、と彼らが言ったのも不思議ではありません。考えてみれば当然です。
残っているのは、それをより深く理解することだけです。確かに、最初は少しめまいがするでしょう。