Skip to content

जावा में रिकर्शन: बेसिक्स, स्टैक और प्रॉब्लम्स की पूरी गाइड

रिकर्शन क्या है?

रिकर्शन एक ऐसी प्रक्रिया है जहाँ एक फंक्शन खुद को ही कॉल करता है। यह मैथ में फंक्शन की तरह है, जहाँ आउटपुट निकालने के लिए फंक्शन खुद पर ही निर्भर रहता है। उदाहरण के लिए, f(x) = x² में f(5) निकालने के लिए, आपको बस x की वैल्यू डालनी होती है। इसी तरह, रिकर्शन में एक फंक्शन अपनी प्रॉब्लम को छोटे-छोटे हिस्सों में तोड़ता है और खुद को कॉल करके हल करता है।

रिकर्शन और इटरेशन में अंतर

  • इटरेशन (लूप्स): कोड को बार-बार चलाने के लिए लूप्स (जैसे for, while) का उपयोग किया जाता है।
  • रिकर्शन: एक फंक्शन खुद को कॉल करके प्रॉब्लम को हल करता है। यह खासकर तब उपयोगी होता है जब कोड को डिवाइड और कॉन्कर (Divide and Conquer) करना हो, जैसे ट्री या ग्राफ डेटा स्ट्रक्चर में।

रिकर्शन की मूल बातें

जावा में रिकर्शन को समझने के लिए दो बुनियादी चीजों का ज्ञान होना चाहिए:

  1. फंक्शन कैसे काम करते हैं: फंक्शन को कैसे कॉल किया जाता है, पैरामीटर कैसे पास होते हैं, और रिटर्न टाइप क्या होता है।
  2. स्टैक डेटा स्ट्रक्चर: जब भी कोई फंक्शन कॉल होता है, तो वह मेमोरी के एक स्टैक में जाता है, जैसे एक के ऊपर एक प्लेट रखना।

मेमोरी में स्टैक का उपयोग

जब कोई फंक्शन कॉल होता है, तो उसके लिए स्टैक में एक नया फ्रेम (Frame) बनता है, जिसमें फंक्शन के लोकल वेरिएबल और पैरामीटर स्टोर होते हैं। जब फंक्शन काम पूरा कर लेता है और रिटर्न करता है, तो यह फ्रेम स्टैक से हटा दिया जाता है।

|   ...   |
| function| <- फंक्शन 3 (एक्जीक्यूट हो रहा है)
| function| <- फंक्शन 2
| function| <- फंक्शन 1
|  main() | <- मेन फंक्शन (सबसे नीचे)

रिकर्शन प्रॉब्लम्स: स्टेप बाय स्टेप

प्रॉब्लम 1: 5 से 1 तक प्रिंट करना (Descending Order)

  • कोड (इटरेटिव):

    int i = 5;
    while (i > 0) {
        System.out.print(i);
        i--;
    }
    
  • कोड (रिकर्सिव):

    public static void printNumber(int n) {
        if (n == 0) {  // बेस केस
            return;
        }
        System.out.print(n);
        printNumber(n - 1);  // रिकर्सिव कॉल
    }
    

    आउटपुट: 54321

    मेमोरी स्टैक का विश्लेषण:

    1. main() कॉल करता है printNumber(5)।
    2. printNumber(5) प्रिंट 5 और कॉल करता है printNumber(4)।
    3. यह प्रक्रिया तब तक चलती है जब तक printNumber(0) कॉल न हो जाए।
    4. printNumber(0) बेस केस है, यह रिटर्न करता है।
    5. अब स्टैक से एक-एक करके फ्रेम्स हटते हैं (Unwinding)।

प्रॉब्लम 2: 1 से 5 तक प्रिंट करना (Ascending Order)

  • कोड (रिकर्सिव):
    public static void printNumber(int n) {
        if (n == 6) {  // बेस केस: जब n, 6 हो जाए तो रुक जाओ
            return;
        }
        System.out.print(n);
        printNumber(n + 1);  // रिकर्सिव कॉल
    }
    
    आउटपुट: 12345

प्रॉब्लम 3: पहले N नेचुरल नंबर्स का योग (Sum)

  • कोड (रिकर्सिव):
    public static void printSum(int i, int n, int sum) {
        if (i == n) {  // बेस केस
            sum += i;  // i को sum में जोड़ें
            System.out.println(sum);
            return;
        }
        sum += i;
        printSum(i + 1, n, sum);  // अगले नंबर के लिए कॉल
    }
    
    मेथड कॉल: printSum(1, 5, 0) आउटपुट: 15

प्रॉब्लम 4: फैक्टोरियल (Factorial)

  • इंट्यूशन: n! = n · (n-1)!
  • बेस केस: 0! = 1 या 1! = 1
  • कोड:
    public static int calculateFactorial(int n) {
        if (n == 0 || n == 1) {  // बेस केस
            return 1;
        }
        int fact_nm1 = calculateFactorial(n - 1); // (n-1)! निकालें
        int fact_n = n * fact_nm1;  // n! = n * (n-1)!
        return fact_n;
    }
    
    मेथड कॉल: calculateFactorial(5) स्टैक विश्लेषण: सबसे पहले calculateFactorial(5) कॉल होता है, फिर calculateFactorial(4), और ऐसे ही calculateFactorial(1) तक। वहाँ से वन रिटर्न होता है और फिर 2·1, 3·2, 4·6, 5·24 होते हुए 120 रिटर्न होता है। आउटपुट: 120

प्रॉब्लम 5: फिबोनाची सीरीज (Fibonacci Series)

  • इंट्यूशन: फिबोनाची सीरीज में हर टर्म पिछले दो टर्म्स का योग होता है। जैसे: 0, 1, 1, 2, 3, 5, 8...
  • बेस केस: पहले दो टर्म्स 0 और 1 पहले से पता होते हैं। बाकी टर्म्स की संख्या n दी गई है।
  • कोड:
    public static void printFib(int a, int b, int n) {
        if (n == 0) {  // बेस केस: जब सारे टर्म्स प्रिंट हो जाएं
            return;
        }
        int c = a + b;  // नया टर्म
        System.out.println(c);
        printFib(b, c, n-1);  // अगले टर्म के लिए कॉल
    }
    
    मेथड कॉल: printFib(0, 1, 5) (यहाँ a=0, b=1 पहले से प्रिंट किए गए हैं, n=5 बाकी टर्म्स हैं।) आउटपुट: 1 2 3 5 8

प्रॉब्लम 6: X की पॉवर N (x^n)

  • इंट्यूशन: x^n = x · x^(n-1)
  • बेस केस: x^0 = 1, x^1 = x
  • कोड:
    public static int calculatePower(int x, int n) {
        if (n == 0) {  // बेस केस
            return 1;
        }
        if (n == 1) {  // बेस केस
            return x;
        }
        int power_nm1 = calculatePower(x, n-1);  // x^(n-1)
        int power_n = x * power_nm1;  // x^n = x * x^(n-1)
        return power_n;
    }
    
    मेथड कॉल: calculatePower(2, 5) आउटपुट: 32

स्टैक ओवरफ्लो (Stack Overflow)

अगर रिकर्सिव फंक्शन में बेस केस नहीं है, या बेस केस कभी ट्रू नहीं होता, तो फंक्शन अनंत काल तक खुद को कॉल करता रहेगा। इससे मेमोरी में स्टैक पूरी तरह भर जाता है और प्रोग्राम क्रैश हो जाता है। इसे स्टैक ओवरफ्लो कहते हैं। इसलिए रिकर्शन में बेस केस का होना बहुत ज़रूरी है, यह समझने के लिए आप बैंक रिकंसिलिएशन स्टेटमेंट (BRS) आसान भाषा में समझें पढ़ सकते हैं।

एडवांस टॉपिक: लॉगरिदमिक टाइम (Log N) में पावर निकालना

स्टैक की हाइट को कम करने के लिए (जिससे स्पेस कॉम्प्लेक्सिटी कम हो), पावर निकालने का एक ऑप्टिमाइज़्ड तरीका है। इसे Divide and Conquer कहते हैं, और इसे लागू करने की रणनीति को 5 सरल कदमों में स्टॉक स्क्रीनिंग: 95% खराब शेयरों को 1 मिनट में हटाएं जैसे तरीकों से समझा जा सकता है।

  • इंट्यूशन:
    • अगर n सम (even) है: x^n = x^(n/2) · x^(n/2)
    • अगर n विषम (odd) है: x^n = x · x^(n-1) = x · x^((n-1)/2) · x^((n-1)/2)
  • कोड:
    public static int calculatePower(int x, int n) {
        if (n == 0) {
            return 1;
        }
        if (x == 0) {
            return 0;
        }
        
        if (n % 2 == 0) {  // n सम है
            return calculatePower(x, n/2) * calculatePower(x, n/2);
        } else {  // n विषम है
            return x * calculatePower(x, n/2) * calculatePower(x, n/2);
        }
    }
    
    इस तरीके से स्टैक की हाइट O(log n) हो जाती है, जो सामान्य तरीके से O(n) थी।

Keep this summary

Save it to LunaNotes and it becomes a real note in your library — editable, searchable, and ready to turn into flashcards or a diagram. Free to start.

Save to LunaNotes

Or summarise for another video.

32K+ people have turned 65K+ videos into notes

“Very useful tool. I'm using it for the last couple weeks and I'm loving it so far. Makes learning on YouTube a great experience.”
Bhai Chrome Web Store review

This summary and transcript were automatically generated using AI with the Free YouTube transcript summary tool by LunaNotes.

Related summaries

प्रॉडक्ट ऑफ़ एरे एक्सेप्ट सेल्फ: ऑप्टिमल DSA समाधान

प्रॉडक्ट ऑफ़ एरे एक्सेप्ट सेल्फ: ऑप्टिमल DSA समाधान

इस वीडियो में हम लीटकोड प्रॉब्लम 238 (Product of Array Except Self) को डिवीज़न ऑपरेटर के बिना हल करना सीखेंगे। ब्रूट फोर्स (O(n²)) से लेकर ऑप्टिमल O(n) टाइम और O(1) एक्स्ट्रा स्पेस वाले प्रीफिक्स-सफिक्स अप्रोच तक, हर तरीके को आसान कोड और डायग्राम के साथ समझाया गया है।

डिजिटल इलेक्ट्रॉनिक्स यूनिट 1 वन शॉट: लॉजिक सिंपलीफिकेशन

डिजिटल इलेक्ट्रॉनिक्स यूनिट 1 वन शॉट: लॉजिक सिंपलीफिकेशन

इस वन शॉट लेक्चर में मोनिका पाल सर पूरी यूनिट 1 को कवर करती हैं, जिसमें नंबर सिस्टम, बेस कन्वर्जन, बाइनरी अंकगणित, और बुलियन अलजेब्रा शामिल हैं। यह वीडियो विशेष रूप से UG स्टूडेंट्स के लिए है और इसमें सभी 12 प्रकार के नंबर सिस्टम कन्वर्जन को आसान तरीके से समझाया गया है.

इन्वर्स ट्रिग्नोमेट्री फंक्शन: सुपर वन शॉट बोर्ड परीक्षा तक की तैयारी

इन्वर्स ट्रिग्नोमेट्री फंक्शन: सुपर वन शॉट बोर्ड परीक्षा तक की तैयारी

यह वीडियो इन्वर्स ट्रिग्नोमेट्री फंक्शन का एक संपूर्ण वन शॉट सॉल्यूशन है, जिसमें मूल अवधारणाओं से लेकर बोर्ड परीक्षा के महत्वपूर्ण प्रश्नों तक सब कुछ शामिल है। इस लेक्चर में एनसीईआरटी, एग्जामप्लर और पिछले 15 वर्षों के पीवाईक्यू (विभिन्न बोर्डों से) का विस्तृत विश्लेषण करके बताया गया है कि किस प्रकार प्रिंसिपल ब्रांच, फॉर्मूले और कन्वर्जन ट्रिक्स का उपयोग करके हर प्रकार के प्रश्न को आसानी से हल किया जा सकता है।

TOC: थ्योरी ऑफ़ कंप्यूटेशन का कम्पलीट वन-शॉट रिवीज़न सेमेस्टर एग्जाम के लिए

TOC: थ्योरी ऑफ़ कंप्यूटेशन का कम्पलीट वन-शॉट रिवीज़न सेमेस्टर एग्जाम के लिए

एक ही वीडियो में पूरा TOC (थ्योरी ऑफ़ कंप्यूटेशन) सिलेबस कवर किया गया है, जो सेमेस्टर एग्जाम और कॉम्पिटिटिव एग्जाम दोनों के लिए उपयोगी है। इसमें ऑटोमेटा थ्योरी, फॉर्मल लैंग्वेजेज और DFA डिज़ाइन को एग्जाम पॉइंट ऑफ़ व्यू से समझाया गया है, जिसमें 95% से अधिक यूनिवर्सिटी सिलेबस मैच करने की गारंटी है।

रीजनिंग: ब्लड रिलेशन, डायरेक्शन और मैथमेटिकल ऑपरेशन पूरी गाइड

रीजनिंग: ब्लड रिलेशन, डायरेक्शन और मैथमेटिकल ऑपरेशन पूरी गाइड

यह वीडियो रीजनिंग के तीन महत्वपूर्ण टॉपिक्स को कवर करता है: डायरेक्शन एंड डिस्टेंस, ब्लड रिलेशन, और मैथमेटिकल ऑपरेशंस। इसमें बेसिक कॉन्सेप्ट्स से लेकर ट्रिकी सवालों को हल करने की स्मार्ट तकनीकों तक, सब कुछ सरल भाषा में समझाया गया है ताकि आप आसानी से याद रख सकें और परीक्षा में बेहतरीन प्रदर्शन कर सकें।

Found this summary useful?

Take it with you. One click puts it in your own LunaNotes library.

Save to LunaNotes

Start taking better notes today with LunaNotes