Factorial (Recursion)
Recursion क्या है
Recursion तब है जब एक method समस्या के छोटे version को हल करने को खुद को call करती है। Factorial classic उदाहरण है, क्योंकि n! को (n-1)! के रूप में लिखा जा सकता है। हर recursion को base case चाहिए — एक सरल स्थिति जो उसे रोके।
Recursion के रूप में factorial
Factorial की स्वाभाविक रूप से recursive परिभाषा है:
5! = 5 × 4! 4! = 4 × 3! ... 0! = 1 (base case)
हर factorial छोटे factorial इस्तेमाल करके define होता है, नीचे 0! = 1 तक। वो structure सीधे recursive method पर mapped होता है।
Java program
public class Factorial {
static int factorial(int n) {
if (n == 0) // base case
return 1;
return n * factorial(n - 1); // recursive call
}
public static void main(String[] args) {
System.out.println(factorial(5));
}
}
Method n के 0 होने पर 1 return करती है (base case), वरना n गुणा n-1 का factorial return करती है। हर call n घटाती है जब तक 0 न पहुँचे।
Dry run
| Call | n | Base case? (n==0) | Return |
|---|---|---|---|
| factorial(5) | 5 | nahi | 5 * factorial(4) |
| factorial(4) | 4 | nahi | 4 * factorial(3) |
| factorial(3) | 3 | nahi | 3 * factorial(2) |
| factorial(2) | 2 | nahi | 2 * factorial(1) |
| factorial(1) | 1 | nahi | 1 * factorial(0) |
| factorial(0) | 0 | haan | return 1 (rukta hai) |
| Wapas jodte hue: 1→1→2→6→24→ 5*24 = 120 | |||
हर call छोटी call के ख़त्म होने का इंतज़ार करती है। जब factorial(0) 1 return करता है, results वापस गुणा होते हैं: 1, 1, 2, 6, 24, और आख़िर में 5×24 = 120।
Base case मायने रखता है
// गलत: कोई base case नहीं -> infinite recursion
static int bad(int n) {
return n * bad(n - 1); // कभी नहीं रुकता -> StackOverflowError
}
Base case बिना, method हमेशा खुद को call करती है, call stack भरते हुए जब तक Java StackOverflowError न फेंके। हर recursion को रुकने की condition होनी चाहिए।
Loop बनाम recursion
- Recursion — सुंदर, गणित से मेल खाता है, पर call stack memory इस्तेमाल करता है।
- Loop — ज़्यादा कुशल, कोई गहरा stack नहीं, बड़े n को बेहतर।
दोनों वही जवाब देते हैं। समझ को recursion सीखिए; performance मायने रखे तब loop इस्तेमाल कीजिए।
आम गलतियाँ
- Base case गायब। Infinite recursion और StackOverflowError देता है।
- गलत base case value।
0! = 1, 0 नहीं। - n न घटाना। हर call को base case की ओर बढ़ना चाहिए।
- बड़े n पर गहरा recursion। बहुत बड़ा n stack overflow कर सकता है — loop इस्तेमाल कीजिए।
सारांश
- Recursion एक method का छोटी समस्या पर खुद को call करना है।
- Factorial:
n * factorial(n-1), base case0! = 1। - Base case recursion रोकता है — कभी मत छोड़िए।
- Calls return होते हुए results वापस गुणा होते हैं।
- बड़े n या बेहतर performance को इसके बजाय loop इस्तेमाल कीजिए।
आगे, recursion देखिए Floyd's triangle में, या loops से तुलना कीजिए Java loops में।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
Java में recursion क्या है?
Recursion में base case क्या है?
n == 0 है जो 1 return करता है। Base case बिना, आपको infinite recursion और StackOverflowError मिलता है।Recursive factorial कैसे काम करता है?
factorial(n) n * factorial(n-1) return करता है, हर बार छोटे n के साथ खुद को call करके, factorial(0) तक जो 1 return करता है। फिर results वापस गुणा होकर जवाब तक पहुँचते हैं।