前回の記事では、JavaScriptの再帰関数を分析しました。では、JavaScriptで再帰関数を使用する方法について説明しました。今回はJavaScriptにおける再帰関数の使い方について詳しく紹介していきます!
いわゆる再帰関数とは、この関数を関数本体内で呼び出すことです。再帰関数を使用する場合は、適切に処理しないと無限ループに陥る可能性があるので注意してください。再帰関数は階乗問題などの特定の状況でのみ使用できます
10 以内で階乗を作ってみましょう:
[Ctrl+A ですべて選択します 注: 外部 Js を導入する必要がある場合は、実行するために更新する必要があります】
再帰関数の呼び出しについてはここまでです
js の再帰関数が自分自身を呼び出すときの保険の方法です。
JS 高度なプログラミングより
典型的な階乗再帰関数:
コードは次のとおりです:
function fact(num){ if (num<=1){ return 1; }else{ return num*fact(num-1); } }
次のコードはエラーを引き起こす可能性があります:
var anotherFact = fact; fact = null; alert(antherFact(4)); //出错
fat は関数ではなくなったため、エラーが発生します。
この問題は、実行される関数へのポインタであるarguments.calleeで解決できます。
新しい関数は次のとおりです:
コードは次のとおりです:
function fact(num){ if (num<=1){ return 1; }else{ return num*arguments.callee(num-1); //此处更改了。 } } var anotherFact = fact; fact = null; alert(antherFact(4)); //结果为24.
JSの通常の再帰の改善
以下に示すように、関数が名前でそれ自体を呼び出すときに再帰関数が形成されます:
コードは次のとおりです。以下のようになります:
function factorial(num) { if(num<=1) { return 1; } else { return num * factorial(num-1); } }
これは古典的な階乗関数です。表面的には問題がないように見えますが、次のコードにより問題が発生する可能性があります。
var anotherFactorial = factorial; anotherFactorial(4); //输出 24 factorial = null;
anotherFactory (4); //TypeError: object [object Window] のプロパティ 'factorial' は関数ではありません Chrome でテストします
その理由は、定義した関数名が実際には関数へのポインターであるためです。この時点では、anotherFactorial が定義されており、その関数を指しているため、anotherFactorial (4) を呼び出すと正常に 24 が出力されます。このとき、factorial = null であるため、
define 関数 を実行する参照は anotherFactorial のままになり、anotherFactorial(4) を呼び出します。 ) 上記のエラーメッセージが表示されます。 この時点で、arguments.callee を使用して関数定義の階乗を置き換えることができます。
関数の定義は次のようになります。
function factorial(num) { if(num<=1) { return 1; } else { return num * arguments.callee(num-1); } }
概要:
上記の記事での詳細な紹介を通じて、友人たちは JavaScript での再帰関数の使用法をよりよく理解したと思います。あなたの仕事に役立つことを願っています!関連する推奨事項:
以上がJavaScript での再帰関数の使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。