C भाषा में रिकरशन क्या है What is Recursion
Recursion, C भाषा में एक तरह का फ़ंक्शन होता है जो खुद को अपने आप को कॉल करता है। इसका मतलब है कि एक फ़ंक्शन के भीतर अन्य फ़ंक्शन का उपयोग किया जा सकता है जो खुद को भी पुनर्विचार करते हैं। इसका प्रयोग अनेक समस्याओं को हल करने में किया जाता है, जैसे कि फ़ैक्टोरियल निकालना, फ़ाइबोनाच्ची श्रृंखला जैसे आदि।
जब एक फ़ंक्शन को अपनी आप को कॉल किया जाता है, तो यह स्टैक में एक नया प्रवेश बनाता है। यह प्रवेश स्टैक शीशे पर होता है। इस प्रकार, एक फ़ंक्शन के उपयोग से स्टैक में एक स्टैक का उपयोग होता है। जब एक फ़ंक्शन अपना काम पूरा कर लेता है, तब वह अपने निर्णय के बाद वापस स्टैक से हटता है और नया प्रवेश द्वारा स्टैक की ऊंचाई को घटाता है। इस प्रकार, जब एक फ़ंक्शन अपने आप को कॉल करता है, तब स्टैक में नए प्रवेश और विविध स्थान बनते रहते हैं।
Recursion का उदाहरण
एक उदाहरण के रूप में, हम एक फ़ंक्शन बना सकते हैं जो n से शुरू होने वाले सभी संख्याओं के योग को प्रिंट करता है। यदि हम n के लिए 5 लेते हैं तो हमारी फ़ंक्शन निम्नलिखित रूप में होगी:
#include <stdio.h>
int sum(int n){
if(n == 0){
return 0;
}
else{
return n + sum(n-1); // रिकर्सन को फिर से कॉल करें
}
}
int main(){
int n = 5;
printf("The sum of all numbers from %d to 1 is %d", n, sum(n));
return 0;
}
यहां हमने एक फ़ंक्शन sum() बनाया है जो एक विशिष्ट संख्या n लेता है और n से शुरू होने वाले सभी संख्याओं के योग को प्रिंट करता है।
हम sum() में रिकर्सन का उपयोग करते हुए संख्या n को जांचते हैं कि क्या यह 0 है। यदि ऐसा होता है तो फ़ंक्शन शून्य लौट जाती है। यदि n शून्य नहीं है तो हम sum() को n-1 के साथ फिर से कॉल करते हैं। हम रिकर्सन के माध्यम से sum() को बार-बार कॉल करते हैं जब तक हम n = 0 नहीं प्राप्त करते हैं और फिर हम अपने नतीजे को लौटा देते हैं।
उपरोक्त उदाहरण में, प्रोग्राम की रनटाइम में sum(5) फ़ंक्शन को कॉल किया जाता है जो 5 अंक का sum (1 + 2 + 3 + 4 + 5 = 15) लेकर लौटता है।
फ़ंक्शन sum () को 5 पास किया जाता है जो यदि n <= 1 है तो उनमें से किसी एक को लौटता है, अन्यथा n * sum (n-1) को कॉल करता है।
इस प्रकार, यह कोड 5 से 1 तक सभी संख्याओं को कॉल करता है, जो फ़ंक्शन में n <= 1 के स्थानों पर पहुँचने से रोक देता है।
इस प्रक्रिया के बाद, sum (5) फ़ंक्शन 15 को लौटाएगा जो फ़ंक्शन कॉल करने वाली main() फ़ंक्शन में रिटर्न होकर प्रिंट होगा।
इसलिए, उपरोक्त कोड का आउटपुट " The sum of all numbers from 5 is: 15" होगा।
Recursion का दूसरा उदाहरण
#include <stdio.h>
int factorial(int n) {
if (n == 0 || n == 1) { // Base Case
return 1;
} else { // Recursive Case
return n * factorial(n - 1);
}
}
int main() {
int num = 5;
printf("Factorial of %d is %d", num, factorial(num));
return 0;
}
यह कोड दिये गए num संख्या के फैक्टरियल को ढूंढने के लिए factorial नामक एक रिकर्सिव फ़ंक्शन का उपयोग करता है। यह फ़ंक्शन दो भागों में बंटा हुआ है - एक बेस केस और एक रिकर्सिव केस। यदि संख्या 0 या 1 है, तो यह फ़ंक्शन 1 को वापस करता है जो बेस केस कहलाता है। अन्यथा, यह संख्या के फ़ैक्टरियल को n * factorial(n - 1) के रूप में ढूंढता है, जो रिकर्सिव केस कहलाता है।
जब हम main फ़ंक्शन को कॉल करते हैं, हम num के फैक्टरियल को प्रिंट करते हैं। यहाँ, num वैल्यू 5 है, इसलिए फ़ंक्शन factorial(5) को कॉल करता है, जो अंततः 120 को वापस करता है। इसलिए, printf फ़ंक्शन के माध्यम से हम Factorial of 5 is 120 को छापते हैं।