ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript での再帰を理解するにはどうすればよいですか?

JavaScript での再帰を理解するにはどうすればよいですか?

PHPz
PHPz転載
2023-08-29 19:25:07684ブラウズ

如何理解 JavaScript 中的递归?

#再帰とは何ですか?

リカージョンという言葉は、繰り返し、過去に何度も戻ることを意味します。再帰関数とは、入力を段階的に変更して自分自身を何度も呼び出す関数です。ここで、入力を1段階変化させるとは、入力を1段階減少または増加させることを意味する。

再帰関数は基本条件に達すると、それ自体の実行を停止します。例を通して基本的な条件が何であるかを理解しましょう。たとえば、数値の階乗を見つける必要があります。入力を 1 ずつ減分して階乗関数を呼び出します。入力が 1 に達するたびに停止する必要があります。したがって、ここでは 1 が基本条件となります。

###文法###

ユーザーは次の構文を使用して JavaScript の再帰を理解できます。

リーリー

上記の構文では、基本条件が true になると null を返して関数の実行を停止することがわかります。基本条件が false の場合、入力値を使用して何らかのアクションを実行し、新しいパラメーター値を使用して recur() 関数を再度呼び出します。

それでは、再帰のさまざまな例を見てみましょう。ここでは、まず for ループを使用して反復アルゴリズムを実装し、それを再帰的メソッドに変換する方法を学びます。

例 1 (for ループを使用して 1 から n までの数値の合計を求める)

次の例では、1 から N までの数値の合計を取得する sumOfN() 関数を作成しました。 for ループを使用して N 回反復し、各反復で I の値を sum 変数に追加します。

最後に sum 変数の値を返します。

リーリー

上記の例では、反復法を使用して N 個の数値の合計を求めます。ここで、再帰的メソッドを使用して同じことを実行します。

例 2 (再帰関数を使用して 1 から n までの数値の合計を求める)

sumOfN() 関数は、以下の例の再帰関数です。引数の値を 1 ずつ減分して、 sumOfN() 関数を繰り返し呼び出します。 sumOfN(N1) は N-1 個の数値の合計を返します。それに N を加算して N 個の数値の合計を取得します。 N の値が 1 になるたびに、関数の実行を停止する基本条件として 1 を返します。

リーリー

上記の再帰関数がどのように機能するかを理解しましょう。以下では、再帰的な関数呼び出しがどのように発生するかを段階的に学習できます。

リーリー

例 3 (配列内のすべての文字列をマージする反復方法)

以下の例では、文字列の配列を作成します。配列のすべての文字列を 1 つの文字列にマージする mergeString() 関数を作成しました。 for ループを使用して配列を反復処理し、すべての文字列を 1 つずつ「str」変数にマージします。

リーリー

例 4 (配列内のすべての文字列を結合する再帰的方法)

以下の例では、mergeString() 関数を再帰関数に変換しています。配列の最初の要素を取得し、それを mergeString() 関数の戻り結果とマージします。 mergeString() 関数は、マージ後の最後の n-1 個の配列要素を返します。さらに、slice() メソッドを使用して、配列から最初の要素を削除します。

配列内に要素が 1 つだけ残っている場合、基本条件と同じ要素が返されます。

リーリー

ユーザーは反復と再帰のどちらの方法を使用する必要がありますか?

主な問題は、反復と再帰のどちらの方法が優れているか、そしてユーザーがどちらの方法を使用する必要があるかということです。

場合によっては、反復メソッドの方が再帰メソッドよりも高速です。さらに、再帰では反復中により多くのメモリが必要になります。分割統治などの一部のアルゴリズムでは、再帰メソッドを使用すると記述するコードが少なくて済むため、再帰の方が便利です。さらに、再帰メソッドで基本的な条件がトリガーされない場合、ユーザーはメモリ リークの問題に直面する可能性があります。

コードをより小さな部分に分割できる場合は、再帰的メソッドを使用する必要があり、コードのパフォーマンスを向上させるには、反復的メソッドを使用する必要があります。

以上がJavaScript での再帰を理解するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。