先のことを言ってください.再帰します.


1.再帰的な定義
再帰とは何か
関数が定義の中で関数自身を呼び出して再帰と呼びます.
上のウィキペディアの再帰についての説明から、簡単な言葉で自分で自分を呼び出します.
function add (num) {
    if (num === 1) {
        return 1        
    }
    return num + add(num - 1)   
}
add(5)       // 15
add(3)       // 6
2.再帰的適用範囲
多くの技術書の中で階乗の例を挙げて再帰を説明していますが、階乗と上の計算求和のほかに、再帰として書いてもいいですか?
何事もwhileで循環して実現できるものは再帰的に実現できる.
3.再帰的なメリット
ロジックをクリアし、コードを簡単に紹介します.
4.再帰的な欠点
再帰的には自分で自身を呼び出すことを知っていますが、閉塞により上層部の役割領域が解放されなくなり、再帰的な循環呼び出しが多すぎるとメモリ漏れを引き起こします.
function add (num) {
    if (num === 1){
        return 1        
    }   
    return num + add(num - 1)   
}
add(100000)    // RangeError:Maximum call stack size exceeded
5.再帰的呼び出し
再帰的に適用される利点が多く、また、その欠点から再帰的にマルチ循環参照時には使用できなくなり、再帰的に引き起こされるメモリ除去問題を解決するために、多くの言語が再帰的に最適化されました.しかし、何が最終的な再帰的な呼び出しですか?
function add (num, sum) {
    sum = sum || 0  
    if (num === 1) {
        return sum + 1 
    }
    return add(num - 1, sum + num) 
}
add(10)     // 55
このような書き方は、前の再帰的な書き方と同じです.このような書き方は、ある言語では、スタックが呼び出された関数のスコープを追跡することなく、現在呼び出されている関数のスコープだけを保存して、再帰的な呼び出しによるメモリ漏れ問題を解決することができます.
しかし、javascriptでは、最終的な再帰的呼び出しはこの問題を解決できません.再帰的な呼び出しを使ってもメモリが漏れてしまう問題があります.少なくとも現在の運行環境では、Javascriptはまだ解決できていません.このために、先端のパートナーは再帰的な循環回数が多すぎてメモリ漏れの問題が発生すると考えています.しかし、この問題は今後解決されます.解決方法も最後の再帰的コールを最適化します.最後の再帰的コールをマスターするのも必要な知識です.
6.栗を挙げる
プロジェクトでは、ある要素が〇〇要素のサブセット要素であるかどうかを判断する必要がある場合、再帰的呼び出しを使用して上へ検索することができます.同様に、ツリー構造のデータはマルチレベルタブまたはマルチレベルナビゲーションバーを巡回しても再帰的な方法が使えます.