
तुलना चार्ट
तुलना के लिए आधार | प्रत्यावर्तन | यात्रा |
---|---|---|
बुनियादी | फ़ंक्शन के किसी निकाय में कथन फ़ंक्शन को स्वयं कहता है। | निर्देशों के सेट को बार-बार निष्पादित करने की अनुमति देता है। |
स्वरूप | पुनरावर्ती कार्य में, केवल समाप्ति की स्थिति (बेस केस) निर्दिष्ट है। | Iteration में इनिशियलाइज़ेशन, कंडीशन, लूप के भीतर स्टेटमेंट का निष्पादन और कंट्रोल चर (इन्क्रीमेंट्स एंड डिक्रीमेंट्स) शामिल हैं। |
समाप्ति | फ़ंक्शन के शरीर में एक सशर्त विवरण शामिल किया जाता है ताकि फ़ंक्शन को पुनरावृत्ति कॉल के बिना वापस जाने के लिए मजबूर किया जा सके। | पुनरावृति कथन को बार-बार निष्पादित किया जाता है जब तक कि एक निश्चित स्थिति तक नहीं पहुंच जाता है। |
शर्त | यदि फ़ंक्शन कुछ स्थिति (बेस केस) कहलाता है, तो यह अनंत पुनरावृत्ति की ओर ले जाता है। | यदि पुनरावृति कथन में नियंत्रण की स्थिति कभी झूठी नहीं होती है, तो यह अनंत पुनरावृत्ति की ओर ले जाती है। |
अनंत पुनरावृत्ति | अनंत पुनरावृत्ति सिस्टम को क्रैश कर सकती है। | अनंत लूप बार-बार सीपीयू चक्रों का उपयोग करता है। |
आवेदन किया है | रिकर्सियन को हमेशा फ़ंक्शन के लिए लागू किया जाता है। | पुनरावृत्ति बयान बयानों या "छोरों" पर लागू होती है। |
ढेर | स्टैक का उपयोग नए स्थानीय चर और मापदंडों के सेट को स्टोर करने के लिए किया जाता है, जो हर बार फ़ंक्शन को कहते हैं। | स्टैक का उपयोग नहीं करता है। |
भूमि के ऊपर | पुनरावृत्ति बार-बार फ़ंक्शन कॉल के ओवरहेड के पास है। | दोहराया फ़ंक्शन कॉल का कोई ओवरहेड नहीं। |
गति | निष्पादन में धीमा। | निष्पादन में तेज। |
कोड का आकार | रिकर्सन कोड के आकार को कम करता है। | Iteration कोड को लंबा बनाता है। |
रिकर्सन की परिभाषा
C ++ एक फ़ंक्शन को अपने कोड के भीतर कॉल करने की अनुमति देता है। इसका मतलब है कि फंक्शन की परिभाषा में एक फंक्शन कॉल है। कभी-कभी इसे " परिपत्र परिभाषा " भी कहा जाता है। फ़ंक्शन द्वारा उपयोग किए जाने वाले स्थानीय चर और मापदंडों के सेट को हर बार बनाया जाता है जब फ़ंक्शन स्वयं कॉल करता है और स्टैक के शीर्ष पर संग्रहीत होता है। लेकिन, हर बार जब कोई फ़ंक्शन स्वयं कॉल करता है, तो यह उस फ़ंक्शन की एक नई प्रतिलिपि नहीं बनाता है। पुनरावर्ती फ़ंक्शन कोड के आकार को महत्वपूर्ण रूप से कम नहीं करता है और स्मृति उपयोग में भी सुधार नहीं करता है, लेकिन पुनरावृत्ति की तुलना में यह कुछ करता है।
पुनरावर्ती को समाप्त करने के लिए, आपको फ़ंक्शन को परिभाषा में एक चयनित कथन शामिल करना होगा ताकि फ़ंक्शन को स्वयं को एक पुनरावर्ती कॉल दिए बिना वापस लौटने के लिए मजबूर किया जा सके। पुनरावर्ती फ़ंक्शन की परिभाषा में चयनित कथन की अनुपस्थिति एक बार कॉल करने पर फ़ंक्शन को अनंत पुनरावृत्ति में होने देगी।
आइए एक फ़ंक्शन के साथ पुनरावृत्ति को समझते हैं जो संख्या के भाज्य को वापस करेगा।
int factorial (इंट संख्या) {int answer; if (संख्या == 1) {वापसी 1; } और {उत्तर = भाज्य (संख्या -1) * संख्या; // पुनरावर्ती कॉलिंग} रिटर्न (उत्तर); }
उपरोक्त कोड में, दूसरे भाग में बयान पुनरावृत्ति को दर्शाता है, क्योंकि कथन फ़ंक्शन को फैक्टरियल () कहता है जिसमें वह रहता है।
Iteration की परिभाषा
Iteration निर्देश की सेट को बार-बार निष्पादित करने की एक प्रक्रिया है जब तक कि पुनरावृति कथन गलत नहीं हो जाता। पुनरावृत्ति विवरण में प्रारंभ, तुलना, पुनरावृति कथन के अंदर कथनों का निष्पादन और अंत में नियंत्रण चर का अद्यतन शामिल है। नियंत्रण चर अद्यतन होने के बाद इसकी तुलना फिर से की जाती है, और प्रक्रिया खुद को दोहराती है, जब तक कि पुनरावृति कथन में स्थिति गलत नहीं हो जाती। पुनरावृति कथन "लूप" के लिए हैं, जबकि "लूप, " डू-ए-लूप "।
वैरिएशन स्टेटमेंट वेरिएबल्स को स्टोर करने के लिए स्टैक का उपयोग नहीं करता है। इसलिए, पुनरावर्ती कार्य की तुलना में पुनरावृति कथन का निष्पादन तेजी से होता है। यहां तक कि पुनरावृत्ति फ़ंक्शन में बार-बार फ़ंक्शन कॉलिंग का ओवरहेड नहीं होता है जो पुनरावर्ती फ़ंक्शन की तुलना में इसके निष्पादन को भी तेज करता है। नियंत्रण की स्थिति झूठी होने पर पुनरावृत्ति को समाप्त कर दिया जाता है। नियंत्रण कथन में नियंत्रण की स्थिति की अनुपस्थिति के परिणामस्वरूप एक अनंत लूप हो सकता है, या यह एक संकलन त्रुटि का कारण हो सकता है।
आइए उपरोक्त उदाहरण के संबंध में पुनरावृति को समझें।
int factorial (इंट संख्या) {int answer = 1; // इनिशियलाइज़ेशन की आवश्यकता है क्योंकि इसमें इसके इनिशियलाइज़ेशन से पहले कचरा मूल्य हो सकता है (int t = 1; t> num; t ++) // iteration {उत्तर = उत्तर * (t); वापसी (उत्तर); }}
उपरोक्त कोड में, फ़ंक्शन पुनरावृत्ति कथन का उपयोग करके संख्या का भाज्य देता है।
पुनरावृत्ति और पुनरावृत्ति के बीच महत्वपूर्ण अंतर
- पुनरावृत्ति तब होती है जब किसी कार्यक्रम में एक विधि बार-बार खुद को बुलाती है जबकि, पुनरावृति तब होती है जब किसी कार्यक्रम में निर्देशों का एक सेट बार-बार निष्पादित होता है।
- एक पुनरावर्ती पद्धति में निर्देशों का सेट, स्टेटमेंट कॉलिंग और खुद को समाप्त करने की स्थिति होती है, जबकि पुनरावृत्ति बयानों में एक लूप और एक नियंत्रण चर के भीतर निर्देशन, वृद्धि, स्थिति, निर्देश का सेट होता है।
- एक सशर्त बयान पुनरावृत्ति की समाप्ति का फैसला करता है और परिवर्तनशील मूल्य को नियंत्रित करता है पुनरावृत्ति कथन की समाप्ति का निर्णय करता है।
- यदि विधि समाप्ति स्थिति के लिए नेतृत्व नहीं करता है तो यह अनंत पुनरावृत्ति में प्रवेश करता है। दूसरी ओर, अगर नियंत्रण चर कभी समाप्ति के मूल्य की ओर नहीं जाता है, तो पुनरावृत्ति मूल्य अनन्तता को पुनरावृत्त करता है।
- अनंत पुनरावृत्ति प्रणाली दुर्घटना का कारण बन सकती है, जबकि अनंत पुनरावृत्ति सीपीयू चक्रों का उपभोग करती है।
- पुनरावृत्ति हमेशा विधि के लिए लागू की जाती है, जबकि पुनरावृत्ति अनुदेश के सेट पर लागू होती है।
- पुनरावृत्ति के दौरान निर्मित चर को स्टैक पर संग्रहीत किया जाता है जबकि, पुनरावृत्ति को स्टैक की आवश्यकता नहीं होती है।
- पुनरावृत्ति बार-बार फ़ंक्शन कॉलिंग के ओवरहेड का कारण बनता है, जबकि पुनरावृत्ति में फ़ंक्शन कॉलिंग ओवरहेड नहीं होता है।
- फंक्शन कॉलिंग के कारण ओवरहेड निष्पादन की पुनरावृत्ति धीमी होती है, जबकि पुनरावृत्ति का निष्पादन तेज होता है।
- पुनरावर्तन कोड के आकार को कम करता है जबकि, पुनरावृत्तियाँ एक कोड को लंबा बनाती हैं।
निष्कर्ष:
पुनरावर्ती कार्य लिखना आसान है, लेकिन वे पुनरावृत्ति की तुलना में अच्छा प्रदर्शन नहीं करते हैं, जबकि, पुनरावृत्ति लिखना कठिन है, लेकिन पुनरावृत्ति की तुलना में उनका प्रदर्शन अच्छा है।