Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
📘 Lesson  ·  Lesson 51

Factorial (Recursion)

Recursion क्या है

Recursion तब है जब एक method समस्या के छोटे version को हल करने को खुद को call करती है। Factorial classic उदाहरण है, क्योंकि n! को (n-1)! के रूप में लिखा जा सकता है। हर recursion को base case चाहिए — एक सरल स्थिति जो उसे रोके।

💡 Recursion = एक method जो खुद को call करती है, रोकने को 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));
    }
}
120

Method n के 0 होने पर 1 return करती है (base case), वरना n गुणा n-1 का factorial return करती है। हर call n घटाती है जब तक 0 न पहुँचे।

Dry run

Dry Run — factorial(5) recursion
CallnBase case? (n==0)Return
factorial(5)5nahi5 * factorial(4)
 factorial(4)4nahi4 * factorial(3)
  factorial(3)3nahi3 * factorial(2)
   factorial(2)2nahi2 * factorial(1)
    factorial(1)1nahi1 * factorial(0)
     factorial(0)0haanreturn 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 case 0! = 1।
  • Base case recursion रोकता है — कभी मत छोड़िए।
  • Calls return होते हुए results वापस गुणा होते हैं।
  • बड़े n या बेहतर performance को इसके बजाय loop इस्तेमाल कीजिए।

आगे, recursion देखिए Floyd's triangle में, या loops से तुलना कीजिए Java loops में।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

Java में recursion क्या है?
Recursion तब है जब एक method उसी समस्या के छोटे version को हल करने को खुद को call करती है। हर call छोटे input पर काम करती है जब तक एक सरल case (base case) तक न पहुँचे जो recursion रोक दे।
Recursion में base case क्या है?
Base case वो condition है जो recursion रोकती है, ताकि यह हमेशा खुद को call न करे। Factorial को, 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 वापस गुणा होकर जवाब तक पहुँचते हैं।
StackOverflowError क्या है?
यह वो error है जो recursion बहुत गहरा जाने पर मिलती है — आमतौर पर क्योंकि base case गायब या गलत है, तो method खुद को call करती रहती है और call stack memory भर देती है।
Factorial को recursion या loop बेहतर है?
Loop ज़्यादा कुशल है और गहरे call stacks बचाता है, तो factorial को अक्सर बेहतर। Recursion सुंदर है और गणित से मेल खाता है, इसे सीखने और स्वाभाविक रूप से recursive समस्याओं को बढ़िया बनाकर।
← Back to Java Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicBubble Sort आपकी प्रगति: 51 / 61 (84%) · Lesson 52 / 61 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें