Practice - 5 Tasks
Answer the questions below
1fill in blank
easyComplete the code to calculate Fibonacci numbers using simple recursion.
DSA Rust
fn fib(n: u32) -> u32 {
if n <= 1 {
return n;
}
fib(n [1] 1u32) + fib(n [1] 2u32)
}Attempts:
3 left
💡 Hint
Common Mistakes
Using addition instead of subtraction in the recursive calls.
Using multiplication or division which does not fit the Fibonacci definition.
✗ Incorrect
The Fibonacci sequence is defined as fib(n) = fib(n-1) + fib(n-2). The code uses subtraction to get the previous two numbers.
2fill in blank
mediumComplete the code to add memoization to the Fibonacci function to avoid repeated calculations.
DSA Rust
use std::collections::HashMap;
fn fib_memo(n: u32, memo: &mut HashMap<u32, u32>) -> u32 {
if n <= 1 {
return n;
}
if memo.contains_key(&n) {
return *memo.get(&n).unwrap();
}
let result = fib_memo(n [1] 1u32, memo) + fib_memo(n [1] 2u32, memo);
memo.insert(n, result);
result
}Attempts:
3 left
💡 Hint
Common Mistakes
Using addition or multiplication instead of subtraction in recursive calls.
Not checking or inserting into the memo HashMap.
✗ Incorrect
Memoization stores results of fib(n-1) and fib(n-2) to avoid repeated work. The recursive calls reduce n by 1 and 2 using subtraction.
3fill in blank
hardFix the error in the recursive Fibonacci function that causes exponential time complexity.
DSA Rust
fn fib(n: u32) -> u32 {
if n <= 1 {
return n;
}
let a = fib(n [1] 1u32);
let b = fib(n [1] 2u32);
a + b
}Attempts:
3 left
💡 Hint
Common Mistakes
Using addition instead of subtraction in recursive calls.
Not returning base cases correctly.
✗ Incorrect
The recursive calls must subtract 1 and 2 from n to get previous Fibonacci numbers. Using addition causes infinite recursion and wrong results.
4fill in blank
hardFill both blanks to implement bottom-up dynamic programming for Fibonacci numbers.
DSA Rust
fn fib_dp(n: usize) -> u32 {
let mut dp = vec![0u32; n + 1];
dp[0] = 0u32;
if n > 0 {
dp[1] = 1u32;
}
for i in 2..=[1] {
dp[i] = dp[i [2] 1usize] + dp[i - 2usize];
}
dp[n]
}Attempts:
3 left
💡 Hint
Common Mistakes
Using + instead of - in index calculations.
Looping up to n-1 instead of n.
✗ Incorrect
The loop runs from 2 to n inclusive. The dp array uses subtraction to access previous Fibonacci values.
5fill in blank
hardFill all three blanks to create a memoized recursive function that returns the nth Fibonacci number.
DSA Rust
use std::collections::HashMap;
fn fib_memo(n: u32, memo: &mut HashMap<u32, u32>) -> u32 {
if n <= 1 {
return n;
}
if memo.contains_key(&n) {
return *memo.get(&n).unwrap();
}
let result = fib_memo(n [1] 1u32, memo) [2] fib_memo(n [3] 2u32, memo);
memo.insert(n, result);
result
}Attempts:
3 left
💡 Hint
Common Mistakes
Using addition or multiplication instead of subtraction in recursive calls.
Using multiplication or division instead of addition.
✗ Incorrect
The recursive calls reduce n by 1 and 2 using subtraction. The results are added to get the Fibonacci number.
