はじめに
Udemyで学習していると、再帰関数に遭遇し、まるで理解できなかったので軽く学習してみました。
再帰関数とは?
関数内で自分自身の関数を呼び出す関数
https://www.wakuwakubank.com/posts/463-javascript-function-advanced/#%E9%AB%98%E9%9A%8E%E9%96%A2%E6%95%B0
はて?
関数の中で自分自身を呼び出す関数って何でしょうか?
具体例を見てみます。
具体例
const func = (num) => {
if (num < 3) {
return 1;
}
return num * func(num - 1);
}
console.log(func(5));
// 60
仮引数に5を渡した簡単な階乗計算です。
この時のfunc(5)の戻り値は下記のようになります。
return 5 * func(4)
今度は仮引数に4を渡しており、func(4)の戻り値は、
return 4 * func(3)
となります。
これを繰り返していくと
func(2)の時にif文を通るのでfunc(2)の時の戻り値は1となります。
結果としてfunc(5)の戻り値は
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/