Discover how a simple function can call itself to solve big problems easily!
Why Factorial Using Recursion in DSA Go?
Imagine you want to find the factorial of a number, like 5! (which means 5 x 4 x 3 x 2 x 1). Doing this by hand means multiplying all numbers one by one, which can get tiring and confusing for bigger numbers.
Manually multiplying each number takes a lot of time and you might lose track or make mistakes, especially with bigger numbers like 10! or 20!. It's slow and error-prone to do it step-by-step without a clear method.
Recursion solves this by breaking the problem into smaller parts. It says: to find factorial of n, multiply n by factorial of (n-1). This repeats until it reaches 1, making the code simple and elegant.
func factorial(n int) int {
result := 1
for i := 1; i <= n; i++ {
result *= i
}
return result
}func factorial(n int) int {
if n <= 1 {
return 1
}
return n * factorial(n-1)
}Recursion lets you solve complex problems by breaking them into smaller, easier steps, making your code cleaner and easier to understand.
Calculating combinations in a card game where you need factorials to find how many ways to pick cards from a deck.
Manual multiplication is slow and error-prone for big numbers.
Recursion breaks the problem into smaller, repeatable steps.
Recursive factorial code is simpler and easier to read.
Practice
Solution
Step 1: Understand factorial definition
Factorial of a number n (written as n!) is the product of all positive integers from 1 to n.Step 2: Compare options with definition
Only The product of all positive integers up to that number correctly describes factorial as a product, not sum or other operations.Final Answer:
The product of all positive integers up to that number -> Option AQuick Check:
Factorial = product of integers [OK]
- Confusing factorial with sum
- Thinking factorial doubles the number
- Assuming factorial divides the number
Solution
Step 1: Identify base case for factorial
Factorial of 0 is defined as 1, so base case should return 1 when n is 0.Step 2: Check options for correct base case
Only if n == 0 { return 1 } returns 1 when n == 0, which is correct base case.Final Answer:
if n == 0 { return 1 } -> Option AQuick Check:
Base case n=0 returns 1 [OK]
- Returning 0 for base case
- Returning wrong value for n=1
- Missing base case causing infinite recursion
func factorial(n int) int {
if n == 0 {
return 1
}
return n * factorial(n-1)
}
fmt.Println(factorial(3))Solution
Step 1: Trace factorial(3) calls
factorial(3) calls 3 * factorial(2), factorial(2) calls 2 * factorial(1), factorial(1) calls 1 * factorial(0), factorial(0) returns 1.Step 2: Calculate return values
factorial(1) = 1*1=1, factorial(2) = 2*1=2, factorial(3) = 3*2=6.Final Answer:
6 -> Option CQuick Check:
3! = 6 [OK]
- Adding instead of multiplying
- Returning n instead of recursive call
- Missing base case causing stack overflow
func factorial(n int) int {
if n == 1 {
return 1
}
return n * factorial(n)
}Solution
Step 1: Analyze recursive call parameter
The function calls factorial(n) again without reducing n, causing infinite recursion.Step 2: Identify correct recursive call
Recursive call should be factorial(n-1) to reduce n and reach base case.Final Answer:
Recursive call uses n instead of n-1 causing infinite recursion -> Option BQuick Check:
Recursive call must reduce n [OK]
- Calling factorial with same n causing infinite loop
- Wrong base case value
- Ignoring base case leading to stack overflow
Solution
Step 1: Understand factorial domain
Factorial is not defined for negative numbers, so function should handle negatives explicitly.Step 2: Add input validation
Adding a check to return 0 (or error) if n is negative prevents invalid recursion calls.Final Answer:
Add a check to return 0 if n is negative before recursion -> Option DQuick Check:
Validate input before recursion [OK]
- Ignoring negative inputs causing infinite recursion
- Using absolute value without validation
- Removing base case causing stack overflow
Ready to prove it?
Pass the test and this pattern moves unknown
