まずはコードを見てみましょう
function reverse($str){ if(strlen($str)>0){ reverse(substr($str,1)); echo substr($str,0,1); return; }}reverse("abcdefg");//gfedcbc
再帰はループの一種です
再帰コードはループコードに変えることができます
再帰コードとループコードの違いは次のとおりです:
再帰はシステムのスタックを使用します中間結果を保存するため
ループは、中間結果を保存するために自己管理型のデータ構造を使用します
つまり、再帰 コードはループ コードよりもはるかに単純です
再帰は効率が悪いと言う人もいますが、彼らは無知です
しかし、すべてのループがそうであるわけではありません再帰で実装できます
戻り値を持たない関数とは何ですか?
静的を試してみる
再帰はループの一種です
再帰コードはループ コードに変えることができます
再帰コードとループ コードの違いは次のとおりです:
再帰はシステムのスタックを使用して中間結果を保存します
ループは自己管理スタックを使用しますデータ構造は中間結果を保存します
したがって、再帰コードはループ コードよりもはるかに簡単です
再帰は非効率だと言う人もいますが、彼らは無知です
しかし、すべてのループが再帰で実装できるわけではありません
再帰はループです
再帰コードはループコードに変えることができます
再帰コードとループコードの違いは次のとおりです:
再帰はシステムのスタックを使用して中間結果を保存します
ループは自己管理のデータ構造を使用して保存します中間結果
それで、再帰 コードはループコードよりもはるかに単純です
再帰は非効率だと言う人もいますが、それは彼らが無知だからです
しかし、すべてのループが再帰で実装できるわけではありません
これは、多くの初心者が解決できない場合もあります。彼らはインスピレーションを通じて突然それを理解します。ただし、ここではループやループについて説明するチュートリアルがほとんどありません。実際、プログラミングを学ぶには、その内容をよく理解する必要があるということを理解していないと思います。ヒープ、スタック、変数の原則は、多くの隠れたルールを理解するための基礎となります。
コンピューター技術を学ぶには、実践が第一条件です
機能を変更します
function reverse($str){ echo "传入 $str\n"; //这里 if(strlen($str)>0){ reverse(substr($str,1)); echo "\n返回时 $str\n";; //这里 echo substr($str,0,1); return; }}reverse("abcdefg");//gfedcbc
传入 abcdefg传入 bcdefg传入 cdefg传入 defg传入 efg传入 fg传入 g传入 返回时 gg返回时 fgf返回时 efge返回时 defgd返回时 cdefgc返回时 bcdefgb返回时 abcdefga
上記のループはこんな感じです
実際のパラメータを代入した後、0より大きいのでreverse(substr($str,1));
次に、 return はそれを逆に返します (substr($str,1));
コンピューター技術を学ぶための最初の条件です。
機能を変更します
function reverse($str){ echo "传入 $str\n"; //这里 if(strlen($str)>0){ reverse(substr($str,1)); echo "\n返回时 $str\n";; //这里 echo substr($str,0,1); return; }}reverse("abcdefg");//gfedcbc
传入 abcdefg传入 bcdefg传入 cdefg传入 defg传入 efg传入 fg传入 g传入 返回时 gg返回时 fgf返回时 efge返回时 defgd返回时 cdefgc返回时 bcdefgb返回时 abcdefga
さて、突然気づきました!
同時に、2番目のステップのエコーも同期的に出力されるので、これは再帰の使用です
これほど詳細な方法で再帰を分析するネットワーク全体の唯一の例ではないでしょうか