JavaScript再帰

JavaScriptで再帰の基本を学ぶ

関数はそれ自体を呼び出すことができます

これが再帰の意味です。そしてそれは私達がきちんとした方法で問題を解決することを可能にします。

これを行うには、名前付き関数式、つまり次のようにする必要があります。

function doSomething() {

}

だから私たちは呼び出すことができますdoSomething()内部doSomething()

The simplest example we can make is calculating a factorial of a number. This is the number that we get by multiplying the number for (number - 1), (number - 2), and so on until we reach the number 1.

4の階乗は(4 *(4-1)*(4-2)*(4-3))= 4 * 3 * 2 * 1、つまり24です。

再帰関数を作成して、それを自動的に計算できます。

function factorial(n) {
  return n >= 1 ? n * factorial(n - 1) : 1
}

factorial(1) //1 factorial(2) //2 factorial(3) //6 factorial(4) //24

必要に応じて、矢印関数を使用することもできます。

const factorial = (n) => {
  return n >= 1 ? n * factorial(n - 1) : 1
}

factorial(1) //1 factorial(2) //2 factorial(3) //6 factorial(4) //24

今はについて話す良い時期ですコールスタック

エラーを実行し、階乗を次のように計算する代わりに、

const factorial = (n) => {
  return n >= 1 ? n * factorial(n - 1) : 1
}

私たちはこれを行います:

const factorial = (n) => {
  return n >= 1 ? n * factorial(n) : 1
}

ご覧のとおり、factorial(n)無限に。すべての呼び出しでそれを下げるのを忘れたので、終わりはありません。

このコードを実行すると、次のエラーが発生します。

RangeError: Maximum call stack size exceeded

Every time a function is invoked, JavaScript needs to remember the current context before switching to the new one, so it puts that context on the call stack. As soon as the function returns, JavaScript goes to the call stack and picks the last element that was added, and resumes its execution.

Maximum call stack size exceeded means that too many elements were put on the stack, and your program crashed.


More js tutorials: