1.2.39 · D1 · Coding › Introduction to Programming (Python) › Recursion depth limit — stack overflow
Jab ek function khud ko call karta hai, computer har call ke liye ek chhoti "sticky note" stack karta hai taaki woh wapas aa sake — aur woh notes ek chhote, fixed drawer mein rehte hain jo bhar sakta hai. Recursion depth limit is topic ke baare mein hai ki kya hota hai jab bahut zyada sticky notes itni tezi se pile up ho jaayein ki unhe remove kiya ja sake.
Is page par yeh assume kiya gaya hai ki aap kuch nahi jaante. Pehle hum "stack overflow" words bolne se pehle, har ek symbol, word, aur picture ko earn karenge jo parent note rely karta hai — ek ek karke, har cheez pichli par build hoti hui.
Ek function instructions ka ek named box hota hai jise aap round brackets ke saath uska naam likh kar run kar sakte ho. Ise run karna calling kehlaata hai.
Ek vending machine ko picture karo jis par ek label laga hai. Aap button press karte ho (yeh hai call ), woh andar kaam karta hai, aur aapko kuch wapas deta hai (yeh hai return value ).
Worked example Sabse chhota function
def greet ():
return "hi"
greet() # this line is a CALL; the machine hands back "hi"
def ka matlab hai "ek machine define karo". greet machine ka naam hai. () hai aap uska button press karna.
Humein yeh isliye chahiye kyunki recursion kuch nahi hai sirf ek machine ke barabar jo apna button khud dabaati hai.
Ek value jo aap brackets ke through function mein dete ho woh ek argument hai. Function ke andar woh ek naam ke under rehti hai; woh naam ek variable hai — ek labelled cup jo ek value hold karta hai.
Parent note mein boom(0) mein, 0 argument hai. boom ke andar, naam n ek cup hai jo 0 hold karta hai. Jab boom call karta hai boom(n + 1) ko, ek bilkul naya cup n naam ka banaaya jaata hai jo 1 hold karta hai. Dono cups share nahi karte — har call ko apna alag cup milta hai.
Intuition Is pure topic ke liye yeh kyun matter karta hai
Kyunki har call apne khud ke cups banata hai, das stacked calls ka matlab hai das alag sets of cups jo ek saath memory mein baithte hain. Yahi "ek saath memory mein baithna" exactly drawer ko bharta hai.
Recursion tab hoti hai jab ek function ke instructions mein khud ko call karna shamil hota hai. Recursion — base case and recursive case dekhiye har acchi recursion ke liye do halves ke liye.
Do mirrors ko ek doosre ke saamne imagine karo: har reflection mein usi scene ki ek chhoti copy hoti hai, baar baar.
Definition Base case & recursive case
Base case woh "yahan ruko, dobara call mat karo" answer hai — finish line.
Recursive case woh "khud ko ek chhote problem par call karo" step hai.
Common mistake "Base case ka hona kaafi hai."
Kyun sahi lagta hai: aapne ek stopping condition likhi. Kyun galat hai: agar har call uss ki taraf move nahi karti, toh aap kabhi pahunchoge nahi. f(n) jo f(n+1) call karta hai base n==0 ke saath finish line se door jaata hai hamesha ke liye.
Ek stack ek aisi pile hai jahan aap sirf top par add kar sakte ho aur top se remove kar sakte ho. Jo cheez sabse akhri In aayi woh pehle Out jaati hai — LIFO .
Canteen mein ek spring-loaded plate dispenser ki tarah socho. Aap ek plate push karte ho upar; aap top plate ko pop karte ho. Aap beech se plate kabhi nahi kheench sakte.
Intuition Stack kyun, queue ya list kyun nahi?
Function calls perfectly nested hoti hain: aakhri function jo aapne enter ki woh hamesha pehli hoti hai jo finish hoti hai aur control wapas deti hai. Yeh "last-in finishes first" pattern exactly LIFO hai — isliye stack natural bookkeeping tool hai. Dekhiye Call stack and function frames .
Ek stack frame pile mein ek plate hai. Yeh ek single active call ke liye "sticky note" hai, jis call ke arguments, local variables, aur return address (exact line jahan wapas jaana hai jab yeh call finish ho) hold hote hain.
Definition Return address
Return address ek bookmark hai: "jab aap ho jaao, caller ko yahan resume karo." Iske bina computer ko nahi pata woh kahaan se aaya tha.
Toh boom(2) ki plate yaad rakhti hai: mera n hai 2, aur jab main done hoon, boom(1) ke andar us jagah wapas jao jahan usne mujhe call kiya tha.
Call stack woh actual stack of frames hai jo interpreter aapke program run hone ke dauran rakhta hai — har call par ek frame push hota hai, aur jab woh call return karti hai tab pop hota hai.
Key subtlety: boom(n + 1) jaise recursive call mein, inner call pehle start hoti hai outer call ke return hone se. Toh koi plate kabhi pop nahi hoti — pile sirf badhti hai. Depth har call ke saath 1 se climb karti hai. Compare karo Iteration vs Recursion ke saath, jahan loop ek hi frame reuse karta hai aur pile height 1 par rehti hai.
Stack memory RAM ka ek chhota, fixed region hai (aksar sirf 1–8 MB) jo call stack ke liye reserved hai. Heap ek alag, kaafi bada region hai bade data ke liye. Dekhiye Memory model — stack vs heap .
Intuition Limit exist kyun karti hai
Kyunki stack memory chhoti aur fixed hai, frames ki hamesha badhti pile eventually jagah khatam kar leti hai. Agar computer sirf push karta raha, operating system program ko ek ugly, silent crash (segfault) se maar deta. Isse rokne ke liye, CPython frames count karta hai aur pehle complain karta hai.
sys aur recursion limit
sys ek built-in Python toolbox hai. sys.getrecursionlimit() safety cap ko padhta hai (default 1000 frames). sys.setrecursionlimit(N) ise change karta hai. Dot . ka matlab hai "sys ke andar jaao aur uske baad wala tool use karo".
Definition Exception & RecursionError
Ek exception Python ka tarika hai yeh kehne ka "kuch galat hua" ek special object raise karke jo program interrupt karta hai. Ek ==RecursionError== woh specific waala hai jiska matlab hai "aapne recursion limit cross ki." Kyunki yeh ek normal exception hai, aap ise try / except se catch kar sakte ho. Dekhiye Exceptions and try-except in Python .
Intuition "Catchable" kyun pura point hai
Segfault aapko koi traceback nahi deta aur koi doosra chance nahi. Ek RecursionError polite hai — aap risky call ko try mein wrap kar sakte ho, error ko except mein catch kar sakte ho, aur gracefully recover kar sakte ho. Isliye Python ne soft limit choose ki.
Definition Tail recursion
Ek recursion jahan self-call bilkul aakhri cheez hai jo function karta hai tail recursive hai. Kuch languages ise ek loop mein optimize karti hain (no growing stack). Python jaanbujhkar nahi karta — dekhiye Tail recursion and why Python lacks tail-call optimization . Isliye tail-recursive Python bhi stack grow karta hai aur overflow ho sakta hai.
Stack memory small and fixed
Exceptions and try except
Recursion depth limit stack overflow
Parent par wapas jaao: parent topic .
Self-test: right side cover karo aur har ek ka jawab do.
Vending-machine picture mein function call karne ka kya matlab hai? Uska button press karna taaki woh run ho aur kuch wapas de.
Kya ek hi function ke do nested calls apne variable cups share karte hain? Nahi — har call ko apna fresh set of local cups milta hai.
Ek sentence mein recursion kya hai? Ek function jinke instructions mein khud ko call karna shamil hai.
Har recursion ke do halves kaunse hain? Base case (ruko) aur recursive case (khud ko chhote problem par call karo).
LIFO ka full form kya hai aur calls isme kyun fit hoti hain? Last In First Out; jo call sabse akhir mein enter hui woh pehli finish hoti hai aur return karti hai.
Stack frame teen cheezein kya hold karta hai? Call ke arguments, local variables, aur return address.
Recursion depth kya hai? Ek saath stacked frames ki sankhya — pile ki height.
Deep recursion ke liye stack memory dangerous kyun hai? Yeh chhoti aur fixed hai (~1–8 MB), isliye badhti pile jagah khatam kar sakti hai.
Recursion limit ko kaun read aur set karta hai? sys.getrecursionlimit() aur sys.setrecursionlimit(N).
Aap exactly 1000 apni calls kyun nahi use kar sakte? Limit sab frames count karta hai, jinmein stack par pehle se wale bhi hain, isliye aapko roughly 1000 minus woh milte hain.
RecursionError segfault se better kyun hai? Yeh try/except se catchable hai, isliye aap recover kar sakte ho silently crash hone ki bajaye.
Kya Python ki tail-call recursion stack growth avoid karti hai? Nahi — Python mein koi tail-call optimization nahi hai, isliye stack abhi bhi grow karta hai.