Python में Recursion
In this page:
def function_name(parameter):
if base_condition:
return base_value
return function_name(smaller_parameter)
Recursion का परिचय
Recursion तब होता है जब कोई function उसी समस्या के छोटे version को हल करने के लिए खुद को call करता है; हर सही recursive function को एक base case चाहिए जो recursion को रोके, वरना यह बिना रुके खुद को call करता रहेगा।
उदाहरण: Introduction to Recursion
def countdown(n):
if n == 0:
return # base case, stops the recursion
print(n)
countdown(n - 1) # calls itself with a smaller value
countdown(3)
Base Case और Recursive Case
Base case समस्या का सबसे simple version है, जिसका जवाब बिना किसी और recursive call के सीधे दिया जाता है, जबकि recursive case function को दोबारा उस input के साथ call करता है जो उस base case के एक कदम और नज़दीक हो -- ये दोनों मिलकर यह guarantee करते हैं कि recursion आख़िरकार खत्म हो।
उदाहरण: Base Case and Recursive Case
def factorial(n):
if n == 0: # base case
return 1
return n * factorial(n - 1) # recursive case
print(factorial(5))
Fibonacci Sequence
Fibonacci sequence को recursively compute करना -- fib(n) = fib(n-1) + fib(n-2) -- लगभग बिल्कुल mathematical definition जैसा है, यही वजह है कि यह एक classic teaching example है, भले ही बिना अतिरिक्त caching के यह inefficient हो।
उदाहरण: Fibonacci Sequence
def fib(n):
if n <= 1:
return n # base case
return fib(n - 1) + fib(n - 2) # recursive case, mirrors the math definition
print(fib(6))
Infinite Recursion
पहुँच योग्य base case के बिना, एक recursive function तब तक खुद को call करता रहता है जब तक Python का call stack खत्म न हो जाए, उस बिंदु पर यह चुपचाप सारी system memory खत्म करने के बजाय एक RecursionError raise करता है।
उदाहरण: Infinite Recursion
def bad_recursion(n):
return bad_recursion(n) # no base case
try:
bad_recursion(1)
except RecursionError:
print("RecursionError: maximum recursion depth exceeded")
Recursion बनाम Iteration
किसी भी recursive function को उसके बराबर एक loop में फिर से लिखा जा सकता है, और loops आमतौर पर तेज़ होते हैं और कम memory इस्तेमाल करते हैं क्योंकि वे हर call के लिए नया stack frame नहीं जोड़ते -- recursion को raw performance के लिए नहीं बल्कि स्वाभाविक रूप से self-similar समस्याओं में clarity के लिए चुना जाता है।
उदाहरण: Recursion vs Iteration
def factorial_recursive(n):
return 1 if n == 0 else n * factorial_recursive(n - 1) # calls itself until n reaches 0
def factorial_iterative(n):
result = 1
for i in range(1, n + 1):
result *= i # accumulates the product without recursive calls
return result
print(factorial_recursive(5), factorial_iterative(5))
Chapter Quiz — Complete all 9 topics to unlock
0/9 topics done
Complete these topics first: