ホームページ  >  記事  >  バックエンド開発  >  関数と recursion_PHP チュートリアルの一般的な理解

関数と recursion_PHP チュートリアルの一般的な理解

WBOY
WBOYオリジナル
2016-07-14 10:09:41801ブラウズ

基礎のない兄弟は、関数の再帰、特に再帰で出力を返す概念とそれがどのように返されるかを理解するのが難しいかもしれません。

以下は教科書から抜粋して私の理解に基づいて説明します。まだ理解していない人の参考になれば幸いです。
機能テスト($n){
エコー $n."nbsp"; を使用します。
if($n>0){
test($n-1);//関数自体を呼び出します。
}その他{
echo "<--->";
}
$n."$nbsp";
をエコー
}
test(3);//関数の出力を呼び出します。
?>
結果は 3 2 1 0 <---> 0 1 2 3
誰にとってもわかりやすいのは、前の出力 3 2 1 0 ですが、後ろの 0 1 2 3 の出力はなぜなのかはよくわかりません。
再帰回帰の出力を理解するには、まず関数とは何かを理解する必要があります
公式説明:
関数は、指定されたタスクを実行する名前付きのコード ブロックです。
関数を使用する理由の 1 つは次のとおりです:
プログラムの再利用性を向上させることができます
再利用性とは、同じコードを何度も書かずに繰り返し使用できることを意味します。 プログラム内で繰り返し書かれたコードを関数として書き、別の場所で必要になったときにその関数名を呼び出すだけで、同じコードを再度書かなくても済むようにすることです。
簡単に言うと、関数は書かれたコードの一部であり、銃が構築され、公共の倉庫に置かれたものです。
ライフル、スナイパーライフル、ピストルなど、さまざまな機能を持つ銃にも独自の名前があるのと同じように、さまざまな機能を持つ関数には独自の名前 [関数 function name(){}] があります。これらの適切な名前の関数と銃には、すでに書いて、構築して、倉庫に置いておきます。
そして、誰かが特定の機能の機能を使用したいとき、警察が警察に行くのと同じように、倉庫に行き、その機能の名前[機能名()]を呼び出し、その機能を取り出して使用します。タスクのさまざまな要件に応じてさまざまな機能を取得するための倉庫。銃と同じです。
————これが関数の定義です。
機能の使用方法:
正式名称は、 aaa(); などの呼び出しです
是 一般的な理解は、誰 (関数の名前を呼び出した) がここに来て、この位置にコードを書いたかというものです。
これは置換であると理解しています。このプレースホルダー [aaa()] が見つかった場合、このプレースホルダー [aaa()] で指定された関数に置き換えられます。見つかった場合は置き換えると、プログラムは引き続き順番に実行されます。
具体例:
/*=============機能(ピストル)を含む倉庫=======================*/
機能テスト($n){
echo $n."nbsp"; を使用します。
if($n>0){
test($n-1);//関数自体を呼び出します。
}その他{
echo "<--->";
}
$n."$nbsp";
をエコー
}
/*=============機能 (ピストル) を含む倉庫======================*/
test(3); //関数を呼び出します。プレースホルダーが見つかったので、test という名前の関数のコードを置き換える必要があると考えられます (test という名前の銃を取得するために倉庫に行くこととも理解できます)。 .弾丸を3つ装填します)
test(3) の最初の出会いは
となりました
/***********************最初の呼び出しで*************************** を置換します*/
echo $n."nbsp"; //この時点では $n=3 の箇条書きが 3 つあります
($ n & gt; 0) {// 判定 $ n が 3 > 0 の場合、以下を実行
test($n-1);
}その他{
echo "<--->" //実行されません
}
echo $n."$nbsp"; // この時点では $n=3 なので、出力は 3 になります
/***********************最初の呼び出しで*************************** を置換します*/
/**2 回目の呼び出しで ********************************************* を置き換えます*/
echo $n."nbsp"; //この時点では $n=3 の箇条書きが 3 つあります
If ($ n & gt; 0) {// 以下の判定 $ n & gt; が実行されます。
$n."nbsp"; ($ n & gt; 0) {// 判定 $ n が 0 より 2 大きい場合、以下を実行 N test ($ n-1); // call 関数に再度遭遇した場合は、その時点で置き換えます (弾丸が再度ヒットします)
echo "&lt; ---&gt;"; //実行しないでください
N echo $n. "$ NBSP"; // このとき $n = 2 なので 2
を出力します。
}その他{
echo "<--->" //実行されません
}
echo $n."$nbsp"; //この時点では $n=3 なので、出力は 3 になります
/**2 回目の呼び出しで ********************************************* を置き換えます*/
/************************************************** 3 回目の呼び出しで置き換えます*/
echo $n."nbsp"; //この時点では $n=3 の箇条書きが 3 つあります
If ($ n & gt; 0) {// 以下の判定 $ n & gt; が実行されます。
$n."nbsp"; ($ n & gt; 0) {// 判定 $ n が 0 より 2 大きい場合、以下を実行
エコー$ n。 "nbsp"; ($ n & gt; 0) {// 判定 $ n が 1 より大きい場合、以下を実行 N test ($ n-1); // call 関数に再度遭遇したら、その時点で置き換えます (一発で)
& Echo "& lt; --- & gt;" // 実行されません
💜
$n."$nbsp"; // このとき、$n= 1、つまり出力は 1 になります
echo "&lt; ---&gt;"; //実行しないでください
N echo $n. "$ NBSP"; // このとき $n = 2 なので 2
を出力します。
}その他{
echo "<--->" //実行されません
}
echo $n."$nbsp"; //この時点では $n=3 なので、出力は 3 になります
/************************************************** 3 回目の呼び出しで置き換えます*/
/************************************************* 4 回目の呼び出しで置換します*/
echo $n."nbsp"; //この時点では $n=3 の箇条書きが 3 つあります
If ($ n & gt; 0) {// 以下の判定 $ n & gt; が実行されます。
$n."nbsp"; ($ n & gt; 0) {// 判定 $ n が 0 より 2 大きい場合、以下を実行
エコー$ n。 "nbsp"; ($ n & gt; 0) {// 判定 $ n が 1 より大きい場合、以下を実行 ️
echo $n."nbsp";
test($n-1);
& Echo "& lt; --- & gt;" // 出力 & lt; ️
echo $n."$nbsp"; // この時点では $n=0 なので、出力は 0
& Echo "& lt; --- & gt;" // 実行されません
N echo $n. "$ NBSP"; // このとき $n = 1 なので 1 を出力します
echo "&lt; ---&gt;"; //実行しないでください
N echo $n. "$ NBSP"; // このとき $n = 2 なので 2
を出力します。
}その他{
echo "<--->" //実行されません
}
echo $n."$nbsp"; //この時点では $n=3 なので、出力は 3 になります
/************************************************* 4 回目の呼び出しで置換します*/
/*##################最終的に、if 判定文と基本式のみで構成されるコードが得られます################ ## #########*/
test(3); //最初に一度だけ置換を呼び出します。
//$n=3
echo $n."nbsp";//出力 3
if($n>0){
//test(3-1) は次のように置き換えられます
echo $n."nbsp";//出力 2
if($n>0){
' ' s
' ずっとスルースルースルーアウトスルーアウトスルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルースルー「」」--'-------pspsへbe to be to be to be to to to to to to toish be to toと同じであること
エコー$ n。 "nbsp"
️ //test(1-1 ) は次のように置き換えられました
N echo $n. // 0 を出力します
& Echo "& lt; --- & gt;" // 出力 & lt;
N echo $n. "$ NBSP" // 0を出力します
echo "<--->";//実行しない
echo $n."$nbsp";//出力 1
}その他{
echo "<--->";//実行しないでください
}
️ echo $n."$nbsp";//出力 2
}その他{
echo "<--->";////実行されません
}
echo $n."$nbsp";//出力 3
/*##################ついに入手############################ * /
最終的なコードに従って順番に出力される結果は
出力結果は 3 2 1 0 <-> 0 1 2 3 です
関数と再帰の使用は、最終的に実行のために上記のコードに解析されます。
関数と再帰について私が理解していることを一言で言えば、「元々、世界には再帰は存在しませんでした。より多くの関数が登場するにつれて、再帰が存在しました。」
少し簡単な理解で、基礎のない兄弟が関数を理解し、再帰を理解し、最終的には自分のアイデアやアイデアを形成するのに役立つことを願っています

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/477637.html技術記事基礎のない兄弟は、関数の再帰、特に再帰で出力を返す概念とそれがどのように返されるかを理解するのが難しいかもしれません。 以下は教科書の例です。そのまま取り出してください...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。