ホームページ  >  記事  >  ウェブフロントエンド  >  js_javascript スキルにおける再帰関数の使用の概要

js_javascript スキルにおける再帰関数の使用の概要

WBOY
WBOYオリジナル
2016-05-16 17:48:501425ブラウズ

10 以内の階乗を試してみましょう:


[Ctrl A すべて選択 注:
外部 Js を導入する必要がある場合は、更新して実行する必要があります
]



再帰関数の呼び出しについてはここまでです。

JS の再帰関数が自分自身を呼び出すときの保険方法です。
JS 高度なプログラミングから
典型的な階乗再帰関数: コードをコピー
コードは次のとおりです:


関数 fat(num){
if (num<=1){
return 1;
}else{
return num*fact(num-1); 🎜> }
}


次のコードはエラーを引き起こす可能性があります。 //Error

fact は関数ではなくなったため、エラーが発生しました。
この問題は、実行される関数へのポインタである argument.callee で解決できます。
新しい関数は次のとおりです:


コードをコピーします コードは次のとおりです:
function fat(num ){
if (num<=1){
return 1;
}else{
return num*arguments.callee(num-1);
}
}
var anotherFact = fat;
fact = null;
alert(antherFact(4)); // 結果は 24 です。

JS での通常の再帰の改善

以下に示すように、関数が名前でそれ自体を呼び出すときに再帰関数が形成されます:


コードをコピーします
コードは次のとおりです: function fastial(num) { if(num<=1)
{
return 1;
}
else
{
return num *階乗(num-1)
}
}


Thisは古典的な階乗関数です。表面的には問題がないように見えますが、次のコードにより問題が発生する可能性があります。
var anotherFactorial = Factorial;

anotherFactorial(4); //出力 24
factorial = null
anotherFactorial (4); //TypeError: オブジェクトの 'factorial'; Window] は関数ではありません。chrome でテストします
その理由は、この時点で、anotherFactorial が定義されており、その関数を指しているため、anotherFactorial (4) を呼び出します。 24 を正常に出力できます。
このとき、factorial = null; の場合、実行定義関数の参照は anotherFactorial です。その場合、anotherFactorial(4) を呼び出すと、上記のエラー メッセージが表示されます。
現時点では、arguments.callee を使用して関数定義の階乗を置き換えることができます。
関数の定義は次のようになります。




コードをコピーします
コードは次のとおりです: function階乗(num) { if(num<=1)
{
return 1 ;
}
else
{
return num * argument.callee(num-1)
}
}


次に、上記の 4 つを使用します。テストコードの行数、テストコードの最後の行も正常に出力できます 24.
----------------------------- ----------- --
上記の内容は、<> 第 2 版の 144 ページのセクション 7.1 からの抜粋です。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。