Articles

JavaScript再帰関数

概要:このチュートリアルでは、再帰技術を使用して、自分自身を呼び出す関数であるJavaScript再帰関数を開発する方

JavaScriptの再帰関数の紹介

再帰関数は、それがしないまで自分自身を呼び出す関数です。p>

という関数があるとしますrecurse()recurse()は、次のように、本体内で自分自身を呼び出す場合、再帰関数です。

function recurse() { // ... recurse(); // ...}
Code language: JavaScript (javascript)

再帰関数には、常に自分自身の呼び出しを停止 したがって、再帰関数は通常、次のようになります。

function recurse() { if(condition) { // stop calling itself //... } else { recurse(); }}
Code language: JavaScript (javascript)

一般に、再帰関数は大きな問題を小さな問題に分解するために使用され バイナリツリーやグラフなどのデータ構造や、バイナリ検索やクイックソートなどのアルゴリズムで頻繁に使用されていることがわかります。

JavaScript再帰関数の例

再帰関数を使用する例をいくつか見てみましょう。

1)単純なJavaScript再帰関数の例

指定された数から1までカウントダウンする関数を開発する必要があるとします。 たとえば、10から1にカウントダウンするには:

321

以下は、countDown()関数を示しています。

function countDown(fromNumber) { console.log(fromNumber);}countDown(3);
Code language: JavaScript (javascript)

このcountDown(3)

数字3から1にカウントダウンするには、次のことができます。

  1. 数字3を表示します。
  2. そして、番号2を示すcountDown(2)countDown(1)を呼び出します。

次のように、countDown()を再帰関数に変更します。

ThiscountDown(3)は、呼び出しスタックサイズが次のように超過するまで実行されます。

Uncaught RangeError: Maximum call stack size exceeded.
Code language: JavaScript (javascript)

…それ自身の呼び出しを停止する条件がないためです。

次の数値がゼロのときにカウントダウンが停止するため、if条件を次のように追加します。

出力:P>

321

countDown()期待どおりに動作するようです。

ただし、関数型チュートリアルで説明したように、関数の名前は実際の関数オブジェクトへの参照です。コードのどこかで関数名がnullに設定されている場合、再帰関数は動作を停止します。たとえば、次のコードはエラーになります。

let newYearCountDown = countDown;// somewhere in the codecountDown = null;// the following function call will cause an errornewYearCountDown(10);
Code language: JavaScript (javascript)

エラー:

Uncaught TypeError: countDown is not a function
Code language: JavaScript (javascript)

スクリプトの動作方法:まず、変数にcountDownnewYearCountDowncountDownnullに設定します。

  • 第三に、newYearCountDown関数を呼び出します。
  • コードは、countDown()countDownnullに設定されているため、エラーが発生します。これを修正するには、次のように名前付き関数式を使用できます:

    2)数字の桁の合計を計算する例

    たとえば、324などの数字が与えられた場合、数字の合計を計算します3 + 2 + 4 =9

    再帰的な手法を適用するには、次の手順を使用できます。

    f(324) = 4 + f(32)f(32) = 2 + f(3)f(3) = 3 + 0 (stop here)

    So

    f(324) = 4 + f(32) f(324) = 4 + 2 + f(3) f(324) = 4 + 2 + 3

    以下は、sumOfDigits()再帰関数を示しています。

    どのように動作しますか:

    概要sumOfDigits()再帰関数:

    それはどのように動作しますか:

    概要

    f(324) = 4 + f(32) f(324) = 4 + 2 + f(3) f(324) = 4 + 2 + 3

    以下は、sumOfDigits()h2>

    • 再帰関数は、それがないまで自分自身を呼び出す関数です
    • 再帰関数は、常に関数が自分自身を呼び出すのを停止する条件を持っています。
    • このチュートリアルは役に立ちましたか?

    div