इस post में आपका स्वागत है !
C Programming में Recursion वो concept है जो शुरू में थोड़ा confusing लगता है — जैसे “function खुद को call कैसे कर सकता है?” — लेकिन जब इसे सही तरीके से समझ लिया जाए, तो यही concept आपको एक pro programmer बना देता है।
यह article सिर्फ definitions या dry theory नहीं है — यहाँ आपको Recursion का meaning, working process, syntax, types, real-life examples, advantages, disadvantages और सबसे बढ़कर step-by-step practical examples in Hindi बताया गया, ताकि concept एकदम clear हो जाए।
इस लेख में आप क्या सीखेंगे, निचे Table में देख सकते हैं।
Table of Contents
Recursion क्या है ?
C programming में जब कोई function किसी काम को करने के लिए अपने आपको बार बार call करता रहता है जब तक वह अपना काम compelet (base condition) न करले उसी process को recursion कहते हैं।
यह एक ऐसा शक्तिशाली Technique है जो जटिल समस्याओं को हल करने के लिए और सुन्दर तरीका प्रदान करता है। इस लिये recursion भी एक बहोत ही Important Topic है, इसे अच्छे से समझना बहोत जरुरी है। इस लिये इस लेख को ध्यान से पढ़े और Practice करें ये लेख आपको recursion समझने में बहोत मदद करेगा।

Recursive Function के दो आवश्यक Part
C Programming में Recursion को सफल होने के लिए दो चीज़ की सख्त जरुरत होती है। अगर इनमे से एक भी गायब हो जाये, तो program कंप्यूटर को crash कर सकता है (जिसे Stack Overflow कहते हैं )
1. Base Condition (The Stop signal)
Base Condition वह रोकने वाली शर्त है। यह वह सबसे छोटा और आसान मामला होता है जिसे फंक्शन बिना किसी और को call किये, सीधे हल करके जवाब देता है।
यह function को Infinite कॉल होने से रोकता है। इसके बिना Recursion कभी खतम नहीं होगा जिससे Recursion Infinite Call में चला जाता है।
2. Recursive Case
यह वह हिस्सा होता है जहां function खुद को Call करता है। लेकिन यहां सबसे जरुरी बात यह है कि इस Call में Problem को छोटे – छोटा भाग में तोड़ा जाता है जिससे वह धीरे – धीरे Base Condition की तरफ बढ़ता है। यह बड़ी समस्या को टुकड़ो में तोड़ता है।
चलिए Factorial के प्रोग्राम से समझते है:
मानलीजिए हमें 5 का factorial निकलना है
(5! = 5 x 4 x 3 x 2 x 1)
गणित में, यह नियम है : N! = N x (N – 1)!
| चरण (Step) | क्या होता है ? | सरल व्याख्या |
| factorial(5) | 5 * factorial(4) | 5 का जवाब पाने के लिए, 4 के जवाब का इंतज़ार करो। |
| factorial(4) | 4 * factorial(3) | 4 का जवाब पाने के लिए, 3 के जवाब का इंतज़ार करो। |
| factorial(3) | 3 * factorial(2) | 3 का जवाब पाने के लिए, 2 के जवाब का इंतज़ार करो। |
| factorial(2) | 2 * factorial(1) | 2 का जवाब पाने के लिए, 1 के जवाब का इंतज़ार करो। |
| factorial(1) | 1 return करो | 1 Base Condition हिट ! (इससे छोटा अब कुछ नहीं ) |
1. निचे जाना (The Push Down): जब function खुद को 5 से 1 तक बार – बार Call करता है। हर बार Stack मेमोरी में हर Call का कॉपी बनता है।
2. ऊपर जाना (The Climb): जब factorial(1) जवाब देता है (जो की 1 है), तो यह जवाब पिछले कॉल को मिलाता है। फिर सारे रुके हुए काम उलटे क्रम में पुरे होते है जैसे – ( 1 से 2, 2 से 6, 6 से 24 और अंत में 120)
चलिए अब Factorial Calculate करने के Program को देखते और Step-by-Step समझते है
C Programming में Recursion का Example Program:
#include <stdio.h>
// Factorial निकालने वाला recursive function
int factorial(int n) {
// Base Condition : जब n 0 या 1 हो, तब factorial हमेशा 1 होता है
if (n == 0 || n == 1)
return 1;
// Recursion कॉल: n * factorial(n - 1)
// यानी हर कॉल अपने से छोटे नंबर का factorial निकालता है
return n * factorial(n - 1);
}
int main() {
int num, result;
// User से Number Input लेना
printf("Enter a number: ");
scanf("%d", &num);
// अगर Number Negative है तो factorial संभव नहीं है
if (num < 0) {
printf("Factorial is not defined for negative numbers.\n");
}
else {
// अगर Number Positive या Zero है तो factorial निकालो
result = factorial(num);
// Result Display करना
printf("Factorial of %d is: %d\n", num, result);
}
return 0;
}
Output:
Enter a number: 4
Factorial of 4 is: 24
Program Explanation Step-by-Step
हम मान लेते हैं कि user 4 Enter किया। यानी हमें 4 का Factorial निकलना है।
1. Function की शुरुआत (main function)
- Main function शुरू होता है
- User 4 input करता है।
- Main function factorial function को कॉल करता रहता है जब तक Base Condition hit न हो जाये ।
2. Recursion का निचे जाना (Descending Phase )
यह वह चरण होता है जहाँ function बार -बार खुद को कॉल करता है और computer की Memory (कॉल Stack ) में काम जमा होता है।
| Call Number | Function Call | Base Condition (n == 1)? |
| Call 1 | factorial (4) | नहीं (4 != 1) |
| Call 2 | factorial (3) | नहीं (3 != 1) |
| Call 3 | factorial (2) | नहीं (2 != 1) |
| Call 4 | factorial (1) | हाँ (1 = 1) |
3. Recursion का ऊपर जाना (Ascending Phase)
जैसे ही कॉल 4 Base Condition को हिट करता है, Recursion रुक जाता है। अब रुके हुए Function उलटे क्रम में अपना काम पूरा करते हैं और जवाब लौटाते हैं।
| Call Number | Function Call | Return वैल्यू |
| Call 4 | factorial (1) | 1 |
| Call 3 | factorial (2) | 2 x 1 |
| Call 2 | factorial (3) | 3x 2 |
| Call 1 | factorial (4) | 4 x 6 |
4. अंतिम Result
सबसे पहला Call (factorial(4)) अब 24 का अंतिम मान लौटाता है।
यह मान main() function में result variable में स्टोर हो जाता है।
Program प्रिंट करता है : Factorial of 4 is: 24
C Programming में Recursion के Type
1. Direct Recursion
C Programming में Recursion का सबसे आम और सीधा प्रकार है। जब एक function सीधे खुद को कॉल करता है तो उसे Direct Recursion कहते जैसे – factorial या फिबोनाची सीरीज का function Direct recursion का example इस Topic के ऊपर Factorial का Program देख सकते है।
2. Indirect Recursion
यह तब होता है, जब एक Function खुद को किसी दूसरे Function के माध्यम से Call करता है। जैसे – Function A Function B को Call करता है, और Function B वापस Function A को Call करता है, जिससे एक Cycle बन जाता है।
Example Program:
Check Even-Odd Number In C Language Using Recursion
#include <stdio.h>
// Function Declaration
void checkOdd(int n);
void checkEven(int n);
// यह function चेक करता है कि संख्या odd है या नहीं
void checkOdd(int n) {
// Base Condition : अगर n 0 है तो Number सम (Even) है
if (n == 0) {
printf("Number is Even.\n");
return;
}
// अगर n एक है तो Number विषम (Odd) है
else if (n == 1) {
printf("Number is Odd.\n");
return;
}
else {
// Number को 2 घटाकर checkEven() को कॉल करो
checkEven(n - 2);
}
}
// यह function check करता है कि संख्या even है या नहीं
void checkEven(int n) {
// Base Condition : अगर n 0 है तो Number सम (Even) है
if (n == 0) {
printf("Number is Even.\n");
return;
}
// अगर n एक है तो Number विषम (Odd) है
else if (n == 1) {
printf("Number is Odd.\n");
return;
}
else {
// Number को 2 से घटाकर checkOdd() को कॉल करो
checkOdd(n - 2);
}
}
int main() {
int num;
// User से Number इनपुट लेना
printf("Enter a number: ");
scanf("%d", &num);
// अगर Number Negative है तो संदेश दिखाना
if (num < 0) {
printf("Please enter a positive number.\n");
return 0;
}
// Result की जानकारी दिखाना
printf("\nChecking whether %d is Odd or Even using indirect recursion...\n\n", num);
// checkOdd() Function call
checkOdd(num);
return 0;
}
Output:
Checking whether 4 is Odd or Even using indirect recursion…
Number is Even.
3. Tail Recursion
C Programming में Recursion का यह वह प्रकार है जिसे आधुनिक Compiler सबसे ज़्यादा optomize कर सकते हैं। जब Recursion Call Function में आखिरी ऑपरेशन होता है, और Call के बाद कोई गड़ना (Calculation) या काम बाकी नहीं रहता।
Compiler इसे एक साधारण Loop में बदल सकता है, जिससे Stack Overhead नहीं होता। Example 1 से 10 तक गिनती Print करना।
1 To N Print Number Using Recursion in C Programming
#include <stdio.h>
// यह function 1 से n तक संख्याएँ प्रिंट करता है (Tail Recursion का उपयोग करके)
void printNumbers(int current, int n) {
// आधार शर्त: जब current, n से बड़ा हो जाए, तब recursion रोक दो
if (current > n)
return;
// वर्तमान संख्या प्रदर्शित करें
printf("%d ", current);
// Tail recursion: आखिरी क्रिया के रूप में खुद को कॉल करना
printNumbers(current + 1, n);
}
int main() {
int n;
printf("Enter the value of n: ");
scanf("%d", &n);
// 1 से n तक की संख्याएँ दिखाएँ
printf("\nNumbers from 1 to %d are:\n", n);
printNumbers(1, n);
return 0;
}
Output: Numbers from 1 to 5 are:
1 2 3 4 5
4. Head Recursion
यह Tail Recursion का ठीक उल्टा है।
जब Recursive Call Function में पहला ऑपरेशन होता है, और Function का मुख्य काम (जैसे printing या Calculation करना) Call के वापस आने के बाद होता है। Head Recursion में, काम Call Stack पर तब तक रुका होता है जब तक कि Base Condition हिट नहीं हो जाती। इससे काम उलटे क्रम में पूरा होता है।
उदाहरण के लिए उलटी गिनती 10 से 1 तक प्रिंट करना।
Print 1 to N Example Program:
#include <stdio.h>
// यह function Head Recursion के concept के साथ उलटी गिनती करता है
void reverseCount(int current, int n) {
// Base Condition : जब current > n हो जाए, तो recursion रोक दो
if (current > n)
return;
// पहले अगले नंबर के लिए कॉल करो (Head Recursion part)
reverseCount(current + 1, n);
// फिर वर्तमान Number प्रिंट करो (इससे उलटी गिनती बनेगी)
printf("%d ", current);
}
int main() {
int n = 10;
printf("10 से 1 तक उलटी गिनती (Head Recursion से):\n");
reverseCount(1, n);
return 0;
}
Output: 10 9 8 7 6 5 4 3 2 1
अतिरिक्त प्रकार (Additional Type)
C Programming में Recursion इन चार मुख्य प्रकारों के आलावा, कभी-कभी एक और प्रकार उल्लेख किया जाता है :
Tree Recursion:
जब एक Function खुद को एक ही Call में दो या दो से ज्यादा बार Call करता है। जैसे फिबोनाची सीरीज इसका सबसे आम उदाहरण है। एक ही Function Call में Function को एक से ज़ायदा बार Call किया जाता है।
C Language में Recursion के फायदे और नुकसान
C Programming में Recursion के फायदे
1. Code की सफाई और सुंदरता: कुछ समस्याएँ, जैसे की tree या फिबोनाची series, अपनी बनावट में ही Recursive होते हैं। इन मामलों में, Recursive Code पढ़ने में ज्यादा आसान और logical लगते हैं, loop वाले Code की तुलना में।
2. जटिल समस्याओं का सरल हल: यह उलझी हुई समस्याओं को छोटे, आसान टुकड़ों में तोड़ने का एक बहुत ही साफ़ सुथरा तरीका देता है।
C में Recursion के नुकसान
1. Memory का ज़्यादा इस्तेमाल: हर बार जब Function खुद को कॉल करता है, तो computer memory में (जिसे कॉल stack कहते हैं) एक नया Record रखना पड़ता है। अगर कॉल बहुत ज़्यादा हो तो, Memory फुल हो सकती है, जिससे Program क्रैश हो सकता है (Stack Overflow) ।
2. थोड़ा धीमा: Loop (iteration) की तुलना में function को बार-बार कॉल करने और वापस लौटने की प्रक्रिया में ज्यादा सयम लगता है।
3 समझना और Debug करना कठिन: जब बहुत सारे function एक दूसरे के जवाब का इंतज़ार कर रहे होते हैं, कोड के प्रवाह (Flow) को Track करना मुश्किल हो जाता है।
C Programming में Recursion Vs Loop
| बिंदु (Point) | Loop (लूप) | Recursion (पुनरावर्तन) |
| 1. परिभाषा (Definition) | जब कोई कोड ब्लॉक खुद को दोहराता है किसी condition तक, उसे loop कहते हैं। | जब कोई function खुद को ही call करता है किसी condition तक, उसे recursion कहते हैं। |
| 2. तरीका (Working) | Loop में repetition iteration के जरिए होता है (for, while, do-while)। | Recursion में repetition function calls के जरिए होता है। |
| 3. उपयोग किए जाने वाले statements | for, while, और do-while loops। | Function खुद को call करता है (direct या indirect recursion)। |
| 4. मेमोरी उपयोग (Memory Usage) | कम memory लेता है क्योंकि एक ही block बार-बार execute होता है। | ज़्यादा memory लेता है क्योंकि हर call stack में नया frame बनता है। |
| 5. गति (Speed) | तेज़ होता है क्योंकि call stack नहीं बनता। | थोड़ा धीमा होता है क्योंकि हर बार function call और return होता है। |
| 6. समाप्ति की शर्त (Termination Condition) | Loop में condition false होने पर execution रुकता है। | C Programming में Recursion base condition true होने पर recursion रुकता है। |
| 7. पढ़ने में आसानी (Readability) | Short loops पढ़ने में आसान होते हैं। | Recursive code logic के हिसाब से ज़्यादा natural लगता है (जैसे factorial, tree traversal)। |
| 8. Stack Overflow का खतरा | नहीं होता। | अगर base condition सही से न दी जाए तो stack overflow हो सकता है। |
| 9. उपयोग के उदाहरण | 1 से 10 तक number print करना, sum of array आदि। | Factorial निकालना, Fibonacci series, Tower of Hanoi आदि। |
| 10. Function Call Overhead | नहीं होता। | हर बार function call का overhead होता है। |
C Programming में Recursion एक मैनेजर की तरह है जो काम को अपने जूनियर को सौंपता है, जब तक कि काम सबसे आसान स्तर पर न पहुँच जाये। फिर सारे जूनियर एक-एक करके मैनेजर को जवाब लौटाते हैं।
सबसे बड़ा फर्क Memory और Speed
Loop : एक office की तरह है, जो एक ही office और एक ही फाइल पर काम करता है इसलिए तेज़ है।
Recursion : हर Call के लिए एक नया Office (Memory Record) खोलता है। इससे Memory भर सकती है
C Programming में Recursion के Quizzes
Quiz 1:
Q1: जब किसी recursive function में base condition ना दी जाए, तो क्या होगा?
- A) Program fast चलेगा
- B) Program automatically रुक जाएगा
- C) Stack overflow error आएगा
- D) Function खुद को call नहीं करेगा
Quiz 2:
Q2: C Programming में Recursion base condition का क्या काम होता है?
- A) Function को infinite call से रोकना
- B) Function को दो बार call करना
- C) Output print करना
- D) Memory allocate करना
Quiz 3:
Q3: नीचे दिए गए function में कौन सा recursion type है?
void display(int n) {
if(n == 0)
return;
printf("%d ", n);
display(n - 1);
}
- A) Head Recursion
- B) Tail Recursion
- C) Indirect Recursion
- D) None
Quiz 4:
Q4: Indirect recursion का मतलब है —
- A) Function खुद को सीधे call करे
- B) Function किसी दूसरे function को call करे और वो वापस पहले वाले को call करे
- C) Function कभी खुद को call न करे
- D) Function loop के अंदर call हो
Quiz 5:
Q5: Recursion की सबसे बड़ी कमी क्या है?
- A) Code छोटा होता है
- B) Memory ज़्यादा लगती है
- C) Function call कम होते हैं
- D) Speed ज़्यादा होती है
FAQs — Recursion in C Programming
Q1. क्या recursion और loop एक ही काम कर सकते हैं?
Ans: हाँ, दोनों repetition (दोहराव) के लिए इस्तेमाल होते हैं। लेकिन recursion function के ज़रिए काम करता है जबकि loop iteration के ज़रिए। अगर memory optimize करनी है, तो loop बेहतर है; अगर logic को natural तरीके से लिखना है, तो recursion बेहतर लगता है।
Q2. क्या recursion हर situation में use करना चाहिए?
Ans: नहीं। C Programming में Recursion केवल उन्हीं problems में अच्छा होता है जो खुद को छोटे-छोटे भागों में naturally divide करती हैं — जैसे factorial, tree traversal, Fibonacci, Tower of Hanoi। Simple tasks के लिए loop ज़्यादा efficient रहता है।
Q3. क्या recursion program को धीमा बनाता है?
Ans: कुछ हद तक हाँ। क्योंकि हर recursive call में memory stack पर नया frame बनता है, जिससे processing time बढ़ जाता है। इसलिए जहाँ loop चल सकता है, वहाँ recursion से बचना चाहिए।
Q4. क्या recursion को optimize किया जा सकता है?
Ans: हाँ, modern compiler tail recursion optimization करता है — यानी अगर function की आख़िरी statement recursion call है, तो compiler उसे loop में बदल देता है जिससे memory overhead कम होता है।
Q5. Recursion debug करना मुश्किल क्यों होता है?
Ans: क्योंकि एक function के अंदर कई nested calls एक साथ चल रही होती हैं। हर call पिछले call के जवाब का इंतज़ार कर रही होती है, जिससे execution flow को track करना complex हो जाता है। Debug करने के लिए call stack या printf tracing का use करना चाहिए।
Conclusion (निष्कर्ष
इस पोस्ट में हमने देखा Recursion केवल Code दोहराने का एक तरीका नहीं है, बल्कि यह समस्यायों को देखने का एक अलग नजरिया है। Loop जहां किसी काम को बार-बार करके आगे बढ़ता है, वहीँ C Programming में Recursion एक बड़ी समस्या को छोटे-छोटे, समान टुकड़ों में तोड़कर हल करता हैं, जब तक कि वह एक सबसे आसान स्थिति तक नहीं पहुँच जाता।
यह सच है कि Recursion शुरुआत में थोड़ा मुश्किल लग सकता है क्योंकि यह हमारे दिमाग के क्रम से काम करने के प्राकृतिक तरीके से अलग है। लेकिन Factorial, Fibonacci जैसे उदहारण से हमें पता चला कि Recursion जटिल Data Structure के लिए सुंदरता और स्पष्टता लाता है।
यह पोस्ट आपको कैसा लगा और आपने क्या सीखे, अपना Feedback Comment बॉक्स में जरूर दें। और अपने दोस्तों के साथ जरूर Share करें।
धन्यवाद ! For Visiting AnwarCodes.com
