1, 1, 2, 3, 5, 8, 13, 21.... と続いていく数式
function fib(n) { if (n === 0 || n === 1) { return 1; } else { return fib(n - 1) + fib(n - 2); } } // 出力 console.log(fib(0)); // 1 console.log(fib(1)); // 1 console.log(fib(2)); // 2 console.log(fib(3)); // 3 console.log(fib(4)); // 5 console.log(fib(50)); // stackoverflow
スタックオーバーフロー ≒ メモリ不足。コールスタックを超えていった
const fib = (n: number): number => (n <= 1 ? n : fib(n - 1) + fib(n - 2)); console.log("fib:", fib(50)); // stackoverflow
const memoFib = (n: number) => { const memo = new Map(); memo.set(0, 0); memo.set(1, 1); const fib_ = (n: number) => { if (memo.has(n)) { return memo.get(n); } const result: number = fib_(n - 1) + fib_(n - 2); memo.set(n, result); return result; }; return fib_(n); }; console.log(memoFib(50)); // 👌