浅談javascript再帰(白話版)
2780 ワード
再帰する
再帰的には問題を解決する方法であり、通常は関数として自身を呼び出すことができると理解できる.
どういう再帰ですか?再帰はどう書きますか
再帰停止を防止すれば、無限再帰による問題
まず、再帰関数を停止する境界条件を忘れたら、何が起こるかを考えます.関数は常に実行されますか?
答えはできません.再帰は無限に実行されません.ブラウザはエラーを投げます.つまりスタックオーバーエラーです.私たちは以下のコードでテストできます.
再帰を停止する境界条件を持つという結論を得た.
転載先:https://juejin.im/post/5cb02d15f265da03b8583fd3
再帰的には問題を解決する方法であり、通常は関数として自身を呼び出すことができると理解できる.
どういう再帰ですか?再帰はどう書きますか
, , :
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