Challenge - 5 Problems
DP Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediateOutput of Recursive Fibonacci Without Memoization
What is the output of this Go program that calculates Fibonacci numbers using simple recursion without any optimization?
DSA Go
package main import "fmt" func fib(n int) int { if n <= 1 { return n } return fib(n-1) + fib(n-2) } func main() { fmt.Println(fib(5)) }
Attempts:
2 left
💡 Hint
Remember the Fibonacci sequence starts with 0, 1, 1, 2, 3, 5...
✗ Incorrect
The function fib(5) returns the 5th Fibonacci number starting from 0. The sequence is 0,1,1,2,3,5, so fib(5) = 5.
🧠 Conceptual
intermediateWhy Does Simple Recursion Fail for Large Fibonacci Numbers?
Why does using simple recursion without any optimization fail or become inefficient for calculating large Fibonacci numbers?
Attempts:
2 left
💡 Hint
Think about how many times fib(3) is calculated when calling fib(5).
✗ Incorrect
Simple recursion recalculates the same Fibonacci numbers multiple times, leading to exponential growth in calls and slow performance.
❓ Predict Output
advancedOutput of Fibonacci with Memoization in Go
What is the output of this Go program that calculates Fibonacci numbers using recursion with memoization (caching results)?
DSA Go
package main import "fmt" var memo = map[int]int{} func fib(n int) int { if n <= 1 { return n } if val, ok := memo[n]; ok { return val } memo[n] = fib(n-1) + fib(n-2) return memo[n] } func main() { fmt.Println(fib(10)) }
Attempts:
2 left
💡 Hint
Recall the 10th Fibonacci number starting from 0 is 55.
✗ Incorrect
Memoization stores previously calculated Fibonacci numbers, so fib(10) returns 55 efficiently.
🔧 Debug
advancedIdentify the Error in Recursive Fibonacci Without Memoization
What error will this Go code produce when calculating fib(-1)?
DSA Go
package main import "fmt" func fib(n int) int { if n == 0 || n == 1 { return n } return fib(n-1) + fib(n-2) } func main() { fmt.Println(fib(-1)) }
Attempts:
2 left
💡 Hint
Check what happens when n is negative in the recursive calls.
✗ Incorrect
Since fib(-1) does not hit the base case properly, it calls fib(-2) and fib(-3) endlessly, causing stack overflow.
🧠 Conceptual
expertWhy Dynamic Programming is Preferred Over Simple Recursion for Overlapping Subproblems
Which statement best explains why dynamic programming is preferred over simple recursion when solving problems with overlapping subproblems?
Attempts:
2 left
💡 Hint
Think about how caching results helps avoid repeated work.
✗ Incorrect
Dynamic programming saves results of subproblems (memoization or tabulation) to prevent recalculating them, making it efficient for overlapping subproblems.
