Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

Java में Recursion का उपयोग कैसे करें

Java Methods

मेथड्स, जिन्हें कभी-कभी फंक्शन्स कहा जाता है, कोड के ब्लॉक होते हैं जो एक विशिष्ट कार्य करते हैं। उदाहरण के लिए, एक मेथड का उपयोग मानों के array के योग की गणना करने या array की सामग्री को कंसोल पर प्रिंट करने के लिए किया जा सकता है।

यहाँ Java में मेथड के लिए सिंटैक्स है:

modifier static returnType methodName (Parameters) { // Method body } 

उदाहरण के लिए, मान लीजिए आप एक मेथड बनाना चाहते हैं जो कंसोल पर वाक्य "It's Wednesday! We're half-way through the week!" प्रिंट करता है। आप निम्न कोड का उपयोग करके ऐसा कर सकते हैं:

class Main { public static void printItsWednesday() { System.out.println("It's Wednesday! We're half-way through the week!"); } public static void main(String[] args) { printItsWednesday(); } } 

जब हम इस मेथड को printItsWednesday() का उपयोग करके कॉल करते हैं, तो निम्न लौटाया जाता है:

It's Wednesday! We're half-way through the week!

यदि आप Java मेथड्स के बारे में अधिक जानने में रुचि रखते हैं, तो आप यहां Java में मेथड्स पर हमारा पूरा गाइड पढ़ सकते हैं।

हमारे ऊपर के उदाहरण में, हम मुख्य प्रोग्राम में prinItsWednesday() मेथड को कॉल करते हैं। लेकिन अगर हम अपने मेथड को मेथड में ही कॉल करते, तो हमने एक रिकर्सिव मेथड बनाया होता।

Java Recursion

रिकर्सिव मेथड्स वे मेथड्स हैं जिन्हें पहले मुख्य मेथड में कॉल किया जाता है और फिर मेथड में ही कॉल किया जाता है। यहाँ रिकर्सिव मेथड के लिए सिंटैक्स है:

static void executeMethod() { // Code here executeMethod(); // This is our recursive call // Code here } public static void main(String[] args) { executeMethod(); // This is the normal method call } 

जब हम अपना प्रोग्राम चलाते हैं, तो executeMethod() मेथड हमारे मुख्य प्रोग्राम में कॉल किया जाता है। इससे executeMethod() मेथड में कोड चलता है, जिसमें इस मामले में executeMethod() मेथड शामिल है। इसलिए, जब हमारा प्रोग्राम चलता है, तो यह एक लूप में प्रवेश करेगा।

प्रोग्राम executeMethod() मेथड को तब तक निष्पादित करता रहेगा जब तक कि कोई शर्त पूरी न हो जाए जो इसे जारी रखने से रोकती है। यदि रिकर्सन को रोकने के लिए कोई शर्तें निर्दिष्ट नहीं की गई हैं, तो प्रोग्राम हमेशा के लिए चलेगा। इसे infinite recursion कहा जाता है।

आपको रिकर्सन का उपयोग क्यों करना चाहिए? पहला, रिकर्सन कुछ मामलों में प्रोग्राम की समय जटिलता को कम कर सकता है। दूसरा, रिकर्सन कुछ एल्गोरिदम को अधिक पठनीय और रखरखाव योग्य तरीके से लागू करना आसान बना सकता है।

यहां कुछ प्रोग्राम्स के उदाहरण दिए गए हैं जिन्हें अक्सर रिकर्सन का उपयोग करके लिखा जाता है:

  • फाइबोनैचि अनुक्रम की गणना
  • String को उलटना
  • किसी संख्या का फैक्टोरियल गणना करना
  • बाइनरी ट्री की ऊंचाई की गणना करना

कहा जाता है कि, रिकर्सन किसी कार्य को करने के लिए एक मानक मेथड लिखने की तुलना में धीमा हो सकता है। ऐसा इसलिए है क्योंकि रिकर्सन हर बार रिकर्सिव मेथड निष्पादित होने पर वेरिएबल्स के लिए एक नया स्टोरेज स्थान बनाता है।

Java Recursion Examples

आइए Java में रिकर्सन कैसे काम करता है, यह प्रदर्शित करने के लिए दो उदाहरणों के माध्यम से चलते हैं।

रिकर्सन का उपयोग करके String को उलटना

मान लीजिए हम एक मिडिल स्कूल टीचर के लिए एक प्रोग्राम बना रहे हैं जो साल भर में प्रत्येक छात्र के ग्रेड्स वाले string को उलट देता है। string छात्र द्वारा प्राप्त पहले ग्रेड से शुरू होता है और छात्र द्वारा अर्जित सबसे हालिया ग्रेड पर समाप्त होता है। हम string को उलटना चाहते हैं ताकि छात्र द्वारा अर्जित अंतिम, या सबसे हालिया, ग्रेड string में पहले हो।

हम string को उलटने के लिए निम्न कोड का उपयोग कर सकते हैं:

public class ReverseGrades { public static String reverse(String grades) { if (grades.isEmpty()) return grades; return reverse(grades.substring(1)) + grades.charAt(0); } public static void main(String[] args) { String grades = "CBCBAABACAABA"; String reverse_grades = reverse(grades); System.out.println("This student's grades for the year are: " + reverse_grades); } } 

हमारा कोड निम्न आउटपुट देता है:

This student's grades for the year are: ABAACABAABCBC

जैसा कि आप देख सकते हैं, हमारे प्रोग्राम ने हमारे string की सामग्री को उलट दिया है। हमारे प्रोग्राम में, हमने reverse() नामक एक रिकर्सिव फंक्शन बनाया है।

जब reverse() फंक्शन निष्पादित होता है, तो पहले जांचें कि grades string खाली है या नहीं। यदि यह है, तो हम ग्रेड्स की सूची को मुख्य प्रोग्राम में वापस करते हैं। यह रिकर्सन को रोकता है क्योंकि फंक्शन के अंत में reverse() कॉल को चलने का मौका नहीं दिया जाता है।

यदि grades string खाली नहीं है, तो हमारा प्रोग्राम reverse() मेथड को फिर से निष्पादित करेगा और फंक्शन के परिणाम को वाक्य के पहले कैरेक्टर के साथ जोड़ देगा। हम अपने उदाहरण में वाक्य में पहले कैरेक्टर को पुनः प्राप्त करने के लिए charAt() मेथड का उपयोग करते हैं, और इसे reverse() मेथड के बाईं ओर जोड़ते हैं।

हमारा string उलट जाने के बाद, This student's grades for the year are: संदेश, जिसके बाद छात्र ग्रेड्स का उलटा string होता है, प्रोग्राम में वापस कर दिया जाता है।

रिकर्सन का उपयोग करके फैक्टोरियल की गणना करना

एक और उदाहरण जहां रिकर्सन उपयोगी हो सकता है, वह है किसी संख्या का फैक्टोरियल गणना करना।

गणित में, फैक्टोरियल किसी संख्या से कम या बराबर सभी पॉजिटिव इंटीजर्स का गुणनफल होता है जिन्हें एक साथ गुणा किया जाता है। उदाहरण के लिए, 5 का फैक्टोरियल 5*4*3*2*1 के बराबर होता है, जो 120 है। क्योंकि फैक्टोरियल मेथड्स में दोहराव वाली गणना शामिल होती है, वे वास्तविक जीवन का एक अच्छा उदाहरण हैं जहां किसी समस्या को हल करने में रिकर्सन उपयोगी हो सकता है।

निम्न Java प्रोग्राम हमें Java में संख्या 7 का फैक्टोरियल गणना करने की अनुमति देता है:

class Main { static int calculateFactorial(int number) { if (number != 0) return number * calculateFactorial(number-1); else return 1; } public static void main(String[] args) { int num = 7; int answer = calculateFactorial(num); System.out.println("The factorial of 7 is: " + answer); } }

हमारा कोड निम्न आउटपुट देता है:

The factorial of 7 is: 5040

इस उदाहरण में, हम calculateFactorial() नामक एक मेथड बनाते हैं जो number पैरामीटर में स्टोर संख्या को अगले calculateFactorial() मेथड के परिणाम से गुणा करता है। यह प्रक्रिया तब तक निष्पादित होती है जब तक number पैरामीटर 0 के बराबर नहीं हो जाता।

जब number पैरामीटर 0 के बराबर होता है, तो हमारे कोड में if स्टेटमेंट 1 लौटाता है और calculateFactorial() मेथड के परिणाम को मुख्य प्रोग्राम में वापस पास कर दिया जाता है।

तो, calculateFactorial() मेथड 7*6*5*4*3*2*1 करता है, फिर उत्तर को मुख्य प्रोग्राम में वापस करता है। एक बार उत्तर गणना हो जाने के बाद, संदेश The factorial of 7 is:, जिसके बाद हमारे प्रोग्राम द्वारा गणना किया गया उत्तर होता है, कंसोल पर प्रिंट होता है।

निष्कर्ष

रिकर्सन प्रोग्रामिंग में एक अवधारणा है जिसका उपयोग स्वयं को कॉल करने वाले मेथड का वर्णन करने के लिए किया जाता है। रिकर्सिव मेथड्स उन मामलों में उपयोगी हो सकते हैं जहां आपको किसी कार्य को कई बार दोहराने की आवश्यकता होती है और वर्तमान पुनरावृत्ति में उस कार्य के पिछले पुनरावृत्ति के परिणाम का उपयोग करते हैं।

यह ट्यूटोरियल Java में रिकर्सन की मूल बातों और रिकर्सिव मेथड्स कैसे बनाएं, इसके बारे में बताता है। इसके अलावा, यह ट्यूटोरियल रिकर्सन के दो उदाहरणों के माध्यम से क्रिया में चलता है, string को उलटने और फैक्टोरियल की गणना करने के संदर्भ में।

अब आप प्रोफेशनल की तरह Java में रिकर्सिव मेथड्स के साथ काम करना शुरू करने के लिए तैयार हैं!

  1. Java Math.random का उपयोग कैसे करें Java Math.random का उपयोग कैसे करें

    Math.random() Java मेथड 0.0 और 1.0 के बीच एक छद्म-यादृच्छिक संख्या उत्पन्न करता है। परिणामी यादृच्छिक संख्या को 0-1 से बाहर की रेंज प्राप्त करने के लिए गुणा किया जा सकता है, और परिणाम 0 हो सकता है लेकिन हमेशा 1 से कम होता है। प्रोग्रामिंग करते समय, अक्सर ऐसी स्थितियां होती हैं जहां आपको एक यादृच्

  1. - रूबी रिकर्सन और मेमोइज़ेशन में महारत: एक व्यावहारिक गाइड

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

  1. - Homebrew के साथ macOS पर एकाधिक Java वर्जन्स इंस्टॉल और प्रबंधित करें

    आपके Mac पर Java के कई वर्जन्स हो सकते हैं। इस लेख में हम दिखाते हैं कि Homebrew का उपयोग करके Mac पर Java कैसे इंस्टॉल करें, और Java8, Java11, Java13 और नवीनतम Java वर्जन जैसे विभिन्न वर्जन्स के बीच कैसे स्विच करें। पूर्व-आवश्यकताएं शुरू करने से पहले, सुनिश्चित करें कि आपके Mac पर Homebrew इंस्ट