प्रोग्रामिंग में, रिकर्सन उस प्रक्रिया को संदर्भित करता है जिसमें कोई फ़ंक्शन स्वयं को प्रत्यक्ष या अप्रत्यक्ष रूप से कॉल करता है। कंप्यूटर विज्ञान में कई समस्याओं को हल करने के लिए रिकर्सन का उपयोग किया जाता है।
जावा प्रोग्रामिंग भाषा पुनरावर्ती विधियों को बनाने का समर्थन करती है, जो कि वे विधियाँ हैं जो स्वयं को कॉल करती हैं।
इस ट्यूटोरियल में, हम उदाहरणों के संदर्भ में चर्चा करने जा रहे हैं कि रिकर्सन कैसे काम करता है, और आप जावा में रिकर्सिव फ़ंक्शन कैसे बना सकते हैं। इस गाइड को पढ़ने के बाद, आप जावा में पुनरावर्ती विधियों को लिखने के विशेषज्ञ होंगे।
जावा तरीके
तरीके, जिन्हें कभी-कभी फ़ंक्शन कहा जाता है, कोड के ब्लॉक होते हैं जो एक विशिष्ट कार्य करते हैं। उदाहरण के लिए, एक विधि का उपयोग मानों की एक सरणी के योग की गणना करने के लिए किया जा सकता है या किसी सरणी की सामग्री को कंसोल पर प्रिंट कर सकता है।
यहाँ जावा में एक विधि के लिए वाक्य रचना है:
संशोधक स्थिर रिटर्नटाइप मेथडनाम (पैरामीटर) {// मेथड बॉडी}
उदाहरण के लिए, मान लीजिए कि आप एक ऐसा तरीका बनाना चाहते हैं जो वाक्य को प्रिंट करे "आज बुधवार है! हम सप्ताह के आधे रास्ते पर हैं!" कंसोल को। आप इस कोड का उपयोग करके ऐसा कर सकते हैं:
कक्षा मुख्य {सार्वजनिक स्थैतिक शून्य printItsWednesday() { System.out.println ("यह बुधवार है! हम सप्ताह के आधे रास्ते पर हैं!");} सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) { PrintItsWednesday( );}}
जब हम printItsWednesday()
. का उपयोग करके इस विधि को कॉल करते हैं , निम्नलिखित लौटाया जाता है:
आज बुधवार है! हम सप्ताह के आधे रास्ते पर हैं!
81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।
बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।
यदि आप जावा विधियों के बारे में अधिक जानने में रुचि रखते हैं, तो आप यहां जावा में विधियों के लिए हमारी पूरी मार्गदर्शिका पढ़ सकते हैं।
हमारे उपरोक्त उदाहरण में, हम prinItsWednesday()
. कहते हैं मुख्य कार्यक्रम में विधि। लेकिन अगर हम अपने तरीके को मेथड में ही कॉल करते, तो हम एक रिकर्सिव मेथड बनाते।
जावा रिकर्सन
पुनरावर्ती विधियाँ वे विधियाँ हैं जिन्हें पहले मुख्य विधि के भीतर बुलाया जाता है और फिर विधि के भीतर ही कहा जाता है। यहाँ एक पुनरावर्ती विधि के लिए वाक्य रचना है:
जब हम अपना प्रोग्राम चलाते हैं, तो executeMethod()
हमारे मुख्य कार्यक्रम में विधि कहा जाता है। यह executeMethod()
. में कोड का कारण बनता है चलाने की विधि, जिसमें इस मामले में executeMethod()
. शामिल है तरीका। इसलिए, जब हमारा प्रोग्राम चलता है, तो यह एक लूप में प्रवेश करेगा।
प्रोग्राम executeMethod()
. को क्रियान्वित करना जारी रखेगा एक शर्त पूरी होने तक विधि जो इसे जारी रखने से रोकती है। यदि ऐसी कोई शर्त निर्दिष्ट नहीं है जो पुनरावर्तन को रोक सके, तो प्रोग्राम हमेशा के लिए चलेगा। इसे अनंत रिकर्सन के रूप में जाना जाता है।
आपको रिकर्सन का उपयोग क्यों करना चाहिए? सबसे पहले, रिकर्सन कुछ मामलों में कार्यक्रम की समय जटिलता को कम कर सकता है। दूसरा, रिकर्सन आपके लिए कुछ एल्गोरिदम को अधिक पठनीय और रखरखाव योग्य तरीके से कार्यान्वित करना आसान बना सकता है।
यहाँ कार्यक्रमों के कुछ उदाहरण दिए गए हैं जिन्हें अक्सर रिकर्सन का उपयोग करके लिखा जाता है:
- फाइबोनैचि अनुक्रम की गणना करना
- एक स्ट्रिंग को उलटना
- किसी संख्या के भाज्य की गणना करना
- बाइनरी ट्री की ऊंचाई की गणना करना
उस ने कहा, किसी कार्य को करने के लिए मानक विधि लिखने से रिकर्सन धीमा हो सकता है। ऐसा इसलिए है क्योंकि हर बार एक पुनरावर्ती विधि निष्पादित होने पर रिकर्सन चर के लिए एक नया संग्रहण स्थान बनाता है।
जावा रिकर्सन उदाहरण
जावा में रिकर्सन कैसे काम करता है, यह प्रदर्शित करने के लिए आइए दो उदाहरणों के माध्यम से चलते हैं।
रिकर्सन का उपयोग करके एक स्ट्रिंग को उलटना
मान लीजिए कि हम एक मध्य विद्यालय के शिक्षक के लिए एक कार्यक्रम बना रहे हैं जो पूरे वर्ष में प्रत्येक छात्र के ग्रेड के साथ एक स्ट्रिंग को उलट देता है। स्ट्रिंग छात्र द्वारा प्राप्त प्रथम श्रेणी से शुरू होती है और छात्र द्वारा अर्जित नवीनतम ग्रेड के साथ समाप्त होती है। हम स्ट्रिंग को उल्टा करना चाहते हैं ताकि छात्र द्वारा अर्जित अंतिम, या सबसे हाल का ग्रेड स्ट्रिंग में पहला हो।
हम स्ट्रिंग को उलटने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं:
पब्लिक क्लास रिवर्सग्रेड्स {सार्वजनिक स्थैतिक स्ट्रिंग रिवर्स (स्ट्रिंग ग्रेड) { अगर (ग्रेड.इसइम्प्टी ()) रिटर्न ग्रेड; रिवर्स रिवर्स (ग्रेड। सबस्ट्रिंग (1)) + ग्रेड। चारएट (0); } सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) {स्ट्रिंग ग्रेड ="CBCBAABACAABA"; स्ट्रिंग रिवर्स_ग्रेड्स =रिवर्स (ग्रेड); System.out.println ("इस छात्र के वर्ष के ग्रेड हैं:" + रिवर्स_ग्रेड); }}पूर्व>हमारा कोड लौटाता है:
इस छात्र के वर्ष के ग्रेड हैं:
ABAACABAABCBC
जैसा कि आप देख सकते हैं, हमारे प्रोग्राम ने हमारे स्ट्रिंग की सामग्री को उलट दिया है। हमारे कार्यक्रम में, हमने
reverse()
. नामक एक पुनरावर्ती फ़ंक्शन बनाया है .
जब
reverse()
फ़ंक्शन निष्पादित किया गया है, पहले जांचें कि ग्रेड स्ट्रिंग खाली है या नहीं। यदि ऐसा है, तो हम ग्रेड की सूची को मुख्य कार्यक्रम में वापस कर देते हैं। यह रिकर्सन को रोकता है क्योंकिreverse()
फ़ंक्शन के अंत में कॉल को चलाने का मौका नहीं दिया जाता है।
यदि ग्रेड स्ट्रिंग खाली नहीं है, तो हमारा प्रोग्राम
reverse()
. निष्पादित करेगा विधि फिर से और फ़ंक्शन के परिणाम को वाक्य के पहले वर्ण से जोड़ दें। हमcharAt()
. का उपयोग करते हैं वाक्य में पहले वर्ण को पुनः प्राप्त करने के लिए हमारे उदाहरण में विधि, और इसेreverse()
के बाईं ओर जोड़ें तरीका।
हमारे स्ट्रिंग को उलटने के बाद,
This student’s grades for the year are:
", उसके बाद छात्र ग्रेड की उलटी स्ट्रिंग, कार्यक्रम में वापस आ जाती है।
पुनरावृत्ति का उपयोग करके एक फैक्टोरियल की गणना करना
एक अन्य उदाहरण जहां पुनरावर्तन उपयोगी हो सकता है वह है किसी संख्या के भाज्य की गणना करना।
गणित में, फ़ैक्टोरियल एक साथ गुणा की गई संख्या से कम या उसके बराबर सभी सकारात्मक पूर्णांकों का गुणनफल होता है। उदाहरण के लिए, 5 का फ़ैक्टोरियल 5*4*3*2*1 के बराबर है, जो कि 120 है। क्योंकि फ़ैक्टोरियल विधियों में दोहराव की गणना शामिल है, वे एक अच्छा वास्तविक जीवन उदाहरण हैं जहां रिकर्सन एक समस्या को हल करने में उपयोगी हो सकता है। .
निम्नलिखित जावा प्रोग्राम हमें जावा में संख्या 7 के भाज्य की गणना करने की अनुमति देता है:
क्लास मेन { स्टैटिक इंट कैलकुलेटफैक्टोरियल (इंट नंबर) { अगर (नंबर! =0) रिटर्न नंबर * कैलकुलेटफैक्टोरियल (नंबर -1); अन्य वापसी 1; } सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) {int num =7; इंट उत्तर =कैलकुलेटफैक्टोरियल (संख्या); System.out.println ("7 का भाज्य है:" + उत्तर); }}पूर्व>हमारा कोड लौटाता है:
The factorial of 7 is: 5040
इस उदाहरण में, हम
calculateFactorial()
. नामक एक विधि बनाते हैं जो संख्या पैरामीटर में संग्रहीत संख्या को अगलेcalculateFactorial()
के परिणाम से गुणा करता है तरीका। यह प्रक्रिया तब तक चलती है जब तक कि संख्या पैरामीटर 0 के बराबर न हो जाए।
जब संख्या पैरामीटर 0 के बराबर होता है, तो हमारे कोड में if स्टेटमेंट 1 देता है और
calculateFactorial()
का परिणाम देता है। विधि को मुख्य कार्यक्रम में वापस भेज दिया जाता है।
तो,
calculateFactorial()
विधि 7*6*5*4*3*2*1 निष्पादित करती है, फिर मुख्य कार्यक्रम का उत्तर लौटाती है। एक बार उत्तर की गणना हो जाने के बाद, संदेशThe factorial of 7 is:
, उसके बाद हमारे प्रोग्राम द्वारा गणना किए गए उत्तर को कंसोल पर प्रिंट किया जाता है।
निष्कर्ष
रिकर्सन प्रोग्रामिंग में एक अवधारणा है जिसका उपयोग एक विधि का वर्णन करने के लिए किया जाता है जो स्वयं को कॉल करता है। पुनरावर्ती विधियाँ उन मामलों में उपयोगी हो सकती हैं जहाँ आपको किसी कार्य को कई बार दोहराने की आवश्यकता होती है और वर्तमान पुनरावृत्ति में उस कार्य के पिछले पुनरावृत्ति के परिणाम का उपयोग करना होता है।
यह ट्यूटोरियल जावा में रिकर्सन की मूल बातें और रिकर्सिव विधियों को बनाने के तरीके के माध्यम से चला गया। इसके अलावा, यह ट्यूटोरियल कार्रवाई में रिकर्सन के दो उदाहरणों के माध्यम से चला गया, एक स्ट्रिंग को उलटने और एक फैक्टोरियल की गणना के संदर्भ में।
अब आप एक पेशेवर की तरह जावा में पुनरावर्ती विधियों के साथ काम करना शुरू करने के लिए तैयार हैं!