浅談javascript再帰(白話版)

2780 ワード

再帰する
再帰的には問題を解決する方法であり、通常は関数として自身を呼び出すことができると理解できる.
どういう再帰ですか?再帰はどう書きますか
              ,      ,     :
var recursiveFun = function(params){
    recursiveFun(params);
}
// or
var recursiveFun1 = function(params){
    recursiveFun2(params);
}
var recursiveFun2 = function(params){
    recursiveFun1(params);
}
今私たちがrecursiveFun()or recursive Fun 1()を実行すると仮定します.上の関数から、彼がずっと繰り返し呼び出していることが分かります.したがって、各再帰関数には境界条件が必要であり、我々は分かりやすく、停止点と呼ばれることができます.無限再帰を防ぐために働きます.
再帰停止を防止すれば、無限再帰による問題
まず、再帰関数を停止する境界条件を忘れたら、何が起こるかを考えます.関数は常に実行されますか?
答えはできません.再帰は無限に実行されません.ブラウザはエラーを投げます.つまりスタックオーバーエラーです.私たちは以下のコードでテストできます.
var i = 0;
var recursiveFun = function(){
    i++;
    recursiveFun();
}
try {
    recursiveFun();
} catch (err) {
    console.log(`i=${i}error:${err}`) 
}
以上は運行結果です.図から私達は1561回実行した後、ブラウザが私達にエラーを投げました.コールスタックの最大サイズを超えました.私たちはどうやって再帰を停止しますか?私たちは条件を一つ追加すればいいです.私たちの条件はiが100に加えられたときに停止すると仮定します.コードは以下の通りです
var i = 0;
var recursiveFun = function(){
    if (i > 100) return;
    i++;
    recursiveFun();
}
try {
    recursiveFun();
} catch (err) {
    console.log(`i=${i}error:${err}`) 
}
締め括りをつける
再帰を停止する境界条件を持つという結論を得た.
転載先:https://juejin.im/post/5cb02d15f265da03b8583fd3