PHPカスタム関數(shù)再帰関數(shù)
再帰関數(shù)、再帰は単なる名前であり、再帰関數(shù)の規(guī)定は次のとおりです: 関數(shù)本體は関數(shù)自體を呼び出します。
この章の學(xué)習(xí)プロセスでは、ある程度の深い思考と理解が必要ですが、どうしても思考が追いつかない場合は、學(xué)習(xí)せずにこの章を飛ばしても問題ありません。
実際の作業(yè)では、再帰は便利ですが、使用量はそれほど多くないからです。再帰は実際の作業(yè)で主に使用されるのは、ファイルやフォルダーを操作するときです。
解決策:
あなたの思考がこの章に追いつかない場合は、このブロックの原理を直接理解し、既製のファイルおよびフォルダーの処理関數(shù)またはファイル処理クラスを使用できます。
考え方の盲點についてお話します:
1. コードは上から下に実行され、すべてのコードには exit などのストップ文字が含まれず、関數(shù)は完了する必要があります。
2. 関數(shù)が関數(shù) A から関數(shù) B にジャンプする場合、関數(shù) A の殘りのコードを?qū)g行する前に関數(shù) B を?qū)g行する必要があります。
3. 再帰関數(shù)は実行を完了でき、終了條件がなければなりません。そうでない場合、関數(shù)は無限ループに制限されます。関數(shù)はそれ自體を永久に実行します。
それを理解するためにコードを書いてみましょう:
<?php $num = 10; //調(diào)用一次函數(shù)A(); A($num); function A( $arg ){ echo $arg; //在函數(shù)A里面去,跑去執(zhí)行函數(shù)B去了 B($arg); echo '我們需要不斷的努力,努力到上天都為我們感動'; echo $arg.'<br />'; } function B( $number ){ echo $number; echo '俺是狗蛋,執(zhí)行完了<br />'; } ?>
上記の例を通して、次のことが分かります:
1. 関數(shù) A の実行の途中で、関數(shù) B を?qū)g行するために走りました
2. 関數(shù) B を?qū)g行した後、最初に表示されるのは、「私は犬です。処刑は終わりました」、次に表示されるのは、「神が私たちに感動するまで、私たちは一生懸命働き続ける必要があります」です
3. これは、私たちがいわゆる盲點であることを証明しています內(nèi)容を考えると、コードは上から下まで実行され、コードは完全に実行される必要があります。
簡単な再帰コードを書いて、関數(shù)自體を呼び出してみましょう。
<?php $n = 2; function dg( $n ){ echo $n.'<br />'; $n = $n - 1; if($n > 0){ //在函數(shù)體內(nèi)調(diào)用了dg自己喲 dg($n); }else{ echo '--------------'; } echo '俺是狗蛋,俺還沒執(zhí)行' . $n . '<br />'; } ?>
表示された結(jié)果は何だと思いますか?なぜこんなことになっているのでしょうか?
慎重に推論してみましょう:
1. 初めて dg() が呼び出されるとき、數(shù)値 $n = 2 が dg に渡され、最初に 2 が表示されます
2. その後、$n - 1 $n の値が表示されますorder to 1
3. 次に、$n が 0 より大きいかどうかを判斷します。$n は 0 より大きいはずなので、自分で再帰を呼び出して、自分で再度実行します。
4. 獨自の dg() を 2 回目に実行すると、「私は犬です、まだ実行していません」というメッセージが表示されます。 $n はまだ実行されていません。実行が完了するまで待ってから再度実行してください
';