ホームページ >ウェブフロントエンド >jsチュートリアル >JSでの再帰実装方法
今回はnotesとは何かを紹介します。実際の事例を見てみましょう。
再帰関数: 再帰関数は、それ自体を名前で呼び出すことによって構築されます。
階乗関数を再帰的に実装します:
方法 1: 関数の名前を使用します
function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } console.log(factorial(4));
結果は次のようになります: 24;
しかし、この再帰実装方法には問題があります。次のコードに注目してください。 結果は次のようになります: 24;
でも:
りー結果は: エラー
その理由:
定義した関数名は実際には関数へのポインターであり、定義した anotherFactorial もその関数を指すため、anotherFactorial (4) を呼び出すと正常に 24 を出力できます
Factorial = null の場合、
define functionを実行する参照が anotherFactorial に残されている場合、anotherFactorial(4) を呼び出すと上記のエラー メッセージが表示されます。 現時点では、arguments.callee を使用して関数定義の階乗を置き換えることができます。
方法 2: argument.calleefunction factorial(num){
if(num<=1){
return 1;
}else{
return num*factorial(num-1);
}
}
var anthorFactorial=factorial;
console.log(anthorFactorial(4));
を使用する
結果は: 24
argument.callee は実行される関数へのポインターであるため、arguments.callee を使用して関数への再帰呼び出しを実装できます。関数名の代わりに argument.callee を使用すると、関数の呼び出し時に問題が発生しないようにできます。したがって、再帰関数を作成する場合は、関数名を使用するよりも argument.callee を使用する方が常に安全です。
ただし、厳密モードでは、スクリプトを介して argument.callee にアクセスすることはできず、このプロパティにアクセスするとエラーが報告されます。ただし、方法 3: 名前付き関数式を使用するfunction factorial(num){
if(num<=1){
return 1;
}else{
return num*factorial(num-1);
}
}
var anthorFactorial=factorial;
factorial=null;
console.log(anthorFactorial(4));
このアプローチは、厳密モードと非厳密モードの両方で機能します。
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨読書:
以上がJSでの再帰実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。