JavaScriptの再帰入門


再帰は関数型プログラミングの分野で重要なトピックである.初心者プログラマはしばしばそれが何であるかを理解するために挑戦し、それがどのように動作します.だから、私はあなたのために再帰を簡単にしようとします.少なくとも、トピックについての基本的な理解をクリアしようとします.では、始めましょう😁.
からのGIFGiphy

再帰とは何か


Googleで“再発”を検索する場合は、メッセージを取得するたびに“あなたは意味:再発”.そして、あなたがクリックするたびに、あなたはリンクを意味しました、それは再びあなたに同じことを示します.そしてこれは何度も何度も何度も何度も呼ぶことになる.

コンピュータプログラミングに関して、再帰的な機能は、それが若干の終了条件を満たすまで、それ自体を呼び出す関数です.さもなければ、我々は無限ループに動かされるか、JavaScriptの場合、呼び出しスタックはあふれます.それをよりよく理解する例を見ましょう.
我々はすべての要因が何であるか知っている.私たちは数自体が1に達するまでそれより小さい値で乗算し続ける場合、数の階乗を得る.
例えば、3番の階乗は3 * 2 * 1 = 6となります.
数の階乗を返す関数を示します.
function factorial(r) {
    if(r <= 0) return 1;
    else return r*factorial(r-1);
}
console.log(factorial(3)); //6
私たちはパラメータrで番号を渡しています.他の条件を見ると、r <= 0である終了条件にマッチするまで、関数自体を呼び出していることがわかります.
同じことがループを使用して実現できることを想像することができます.そして、あなたは正しい.ループを使用するのと同じ機能があります.
function factorial(r) {
    let factor = 1;
    for(let i = r; i > 1; i--) {
        factor *= i;
    }
    return factor;
}
console.log(factorial(3)); //6
むしろ、ループを使用することは、そのような小さな機能の場合、より良い選択であるでしょう.JavaScriptでは、ループを実行するのは一般的に関数を複数回呼び出すよりも安価です.時間の複雑さは再帰関数でより高くなる.しかし、ループが価値がない複数のインスタンスがあります.彼らはその機能をより複雑にする.また、ループを使用して任意の再帰関数を実装することができます.
再帰関数を再帰的に構築するために再帰関数がどのように動いているかを知っています.

再帰関数の作成


再帰的な関数で作業している間、気をつけておく最も重要なことは、終了条件を宣言することです.それ以外の場合、関数は呼び出しスタックをオーバーフローします.
どのように、我々は終了条件を宣言しますか?ほとんどの場合、if文の中に置くことができます.
この例では、与えられた範囲の和を返す再帰関数を記述したいとします.したがって、3を通ると、1から2までの範囲の和、すなわち1 + 2 + 3 = 6が出力されます.
Step 1 :関数名を宣言する.これは、範囲を指定する単一のパラメータを取るでしょう.必要に応じて矢印機能を使用して自由に感じる.
function sumRange(r){

}
Step 2 :終了文を宣言します.いつこの関数を終了しますか?我々の範囲が0であるとき、正しく?
function sumRange(r) {
    if(r <= 0) return 0;
}
ステップ3:魔法が起こるあなたの論理.
ここで何を達成したいですか?我々の範囲が0になるまで、我々はループ(現在の範囲+(Range - 1))をしたいです.私たちはRから現在の範囲を得ています.パラメータを( r - 1 )に渡して、関数を何度も何度も呼び出します.
function sumRange(r) {
    if(r <= 0) return 0;
    return r+sumRange(r-1);
}

関数の流れ:

  • まず、値3を渡して関数を呼び出します.
  •    sumRange(3);
    
  • 上記の呼び出しは関数を実行します.まず、if文をチェックします.それが偽であるとわかると、それは他で働き続けます.他に、我々は帰ります3 + 値sumRange(3-1) .
  •    return 3 + sumRange(2);
    
  • 上記のロジックもここで動作します.それ以外は、我々の範囲は2 . それで、それは帰ります2 + sumRange(2-1)
  •    return 2 + sumRange(1);
    
  • 再び起こる.今の範囲は1 . それで、帰りますsumRange(1-1) .
  •    return 1 + sumRange(0);
    
    範囲が0になると、if - if条件が実行され、0が返されます.
    すべての関数コールが値を返したので、すべてがunwindを開始します.最も内側の関数は最初に戻ります.
    それでsumRange(0) は0を返す.sumRange(1)1 + sumRange(0) または1 + 0 = 1 sumRange(2)2 + sumRange(1) または2 + 1 + 0 = 3 sumRange(3)3 + sumRange(2) または3 + 2 + 1 + 0 = 6 そして、我々は答え6を得ます、そして、我々はされます.
    この点に関して記事を読むならば、大きいありがとう😊. 再帰がどのように機能し、どのように再帰的な関数を書くかについての基本的な理解を得ることを願っています.