この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - JavaScript コーディング問題
93. Fibonacci数をrecursionで計算する
正常に動かすのは難しいですが、再帰を使用する可能性があるアプローチについてはいくつかあります。
- メモ化
このアプローチでは、再帰を使用してFibonacci数を計算するが、計算済みの数値を保持するキャッシュを使用して、同じ計算を複数回行わないようにすることで、計算時間を節約します。
const fib = (n, cache = {}) => { if (n === 0) return 0; if (n === 1) return 1; if (cache[n]) return cache[n]; const result = fib(n - 1, cache) + fib(n - 2, cache); cache[n] = result; return result;}fib(10); // 55fib(1000); // 正常に動作しない
- 末尾再帰
このアプローチでは、末尾再帰を使用してFibonacci数を計算します。末尾再帰は、最後の操作が再帰呼び出しである再帰関数のことで、JavaScriptがこの種類の再帰を自動的にループに変換するため、スタックオーバーフローを避けることができます。
const fib = (n, a = 0, b = 1) => { if (n === 0) return a; if (n === 1) return b; return fib(n - 1, b, a + b);}fib(10); // 55fib(1000); // 正常に動作しない
どちらのアプローチも、fib(1000)
を正常に動作させることはできませんが、末尾再帰により大幅に高速化されているため、キャッシュを使用する場合のように、さまざまな入力値に対応できます。