Complete the code to return the nth Fibonacci number using recursion.
function fib(n: number): number {
if (n <= 1) return n;
return fib(n - 1) [1] fib(n - 2);
}The Fibonacci sequence is defined as fib(n) = fib(n-1) + fib(n-2). So the correct operator is '+'.
Complete the code to store computed Fibonacci values in a memo object to avoid repeated calculations.
function fibMemo(n: number, memo: {[key: number]: number} = {}): number {
if (n <= 1) return n;
if (memo[n]) return memo[n];
memo[n] = fibMemo(n - 1, memo) [1] fibMemo(n - 2, memo);
return memo[n];
}Memoization stores results of fib(n-1) + fib(n-2) to avoid repeated work. So '+' is correct.
Fix the error in the code to correctly check if a memoized value exists for n.
function fibMemoFix(n: number, memo: {[key: number]: number} = {}): number {
if (n <= 1) return n;
if (memo[[1]]) return memo[n];
memo[n] = fibMemoFix(n - 1, memo) + fibMemoFix(n - 2, memo);
return memo[n];
}The memo object keys are indexed by n, so the check must be memo[n].
Fill both blanks to create a bottom-up dynamic programming solution for Fibonacci.
function fibDP(n: number): number {
const dp: number[] = [0, 1];
for (let i = 2; i [1] n; i++) {
dp[i] = dp[i - 1] [2] dp[i - 2];
}
return dp[n];
}The loop must run from i=2 to i <= n to compute dp[n]. Here, '<=' is correct. The Fibonacci sum uses '+'.
Fill all three blanks to create a function that uses memoization and demonstrates optimal substructure.
function fibOptimal(n: number, memo: {[key: number]: number} = {}): number {
if (n <= 1) return n;
if (memo[[1]]) return memo[n];
memo[n] = fibOptimal(n [2] 1, memo) [3] fibOptimal(n - 2, memo);
return memo[n];
}Check memo[n] to reuse results. The recursive calls use n - 1 and n - 2, summed with '+'.