JSでの再帰実装方法

php中世界最好的语言
php中世界最好的语言オリジナル
2018-04-18 09:07:402898ブラウズ

今回は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.callee

function 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。