0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

再帰関数とは何ぞや?

Posted at

はじめに

Udemyで学習していると、再帰関数に遭遇し、まるで理解できなかったので軽く学習してみました。

再帰関数とは?

関数内で自分自身の関数を呼び出す関数
https://www.wakuwakubank.com/posts/463-javascript-function-advanced/#%E9%AB%98%E9%9A%8E%E9%96%A2%E6%95%B0

はて?
関数の中で自分自身を呼び出す関数って何でしょうか?
具体例を見てみます。

具体例

main.js
const func = (num) => {
  if (num < 3) {
    return 1;
  }

  return num * func(num - 1);
}

console.log(func(5));
// 60 

仮引数に5を渡した簡単な階乗計算です。

この時のfunc(5)の戻り値は下記のようになります。

main.js
return 5 * func(4)

今度は仮引数に4を渡しており、func(4)の戻り値は、

main.js
return 4 * func(3)

となります。
これを繰り返していくと

func(2)の時にif文を通るのでfunc(2)の時の戻り値は1となります。

結果としてfunc(5)の戻り値は

main.js
return 5 * 4 * 3 * 1
// 60

となります。

さいごに

再帰関数の動きを少しだけ理解できたように感じます。
ついでにchromeのデバッガーで確認するとコールスタックにfunc関数が積み重なっていくのが確認でき、再帰終了文がないとスタックオーバーフローを引き起こす理由がわかりました。

参考

https://qiita.com/ryo2132/items/4bedeec846d0427f1ac7
https://qiita.com/jumpyoshim/items/20e6b5e70efa466699b4
https://developer.mozilla.org/ja/docs/Glossary/Call_stack
https://www.wakuwakubank.com/posts/463-javascript-function-advanced/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?