💡
フィボナッチ数列のn番目の数を求める再帰関数
ヘッド再帰
- 二つの再帰関数を呼び出すことになるので、計算量が膨大になってしまいます。
test.js
// ヘッド再帰
function fibonacci(n){
if (n == 0) return 0;
if (n == 1) return 1;
return fibonacci(n-1) + fibonacci(n-2);
}
末尾再帰
- 末尾再帰を用いることで計算量を抑えること(最適化)ができます。
- ヘッド再帰では計算量が大きすぎて処理し切れないものも、末尾再帰なら問題なく処理できることがあります
test.js
// 末尾再帰
function fibonacciTail(n){
return fibonacciTailHelper(0,1,n);
}
function fibonacciTailHelper(f1,f2,n) {
if (n == 0) return f1;
return fibonacciTailHelper(f2,f1+f2,n-1);
}
fibonacciTail(4)の場合
関連
Discussion