Visual walkthrough — Classic recursion — factorial, Fibonacci, binary search
1.2.38 · D2· Coding › Introduction to Programming (Python) › Classic recursion — factorial, Fibonacci, binary search
Hume sirf kuch ideas chahiye, aur hum har ek ko use karne se pehle earn karenge. Chalte hain ekdum zero se.
Step 1 — "Khud ko ek chhote problem par call karna" actually kaisa dikhta hai
KYA. Ek function ek named machine hai: tum ise ek input do, yeh ek output deta hai. Jab hum likhte hain toh matlab hai "factorial machine ko andar number ke saath run karo".
EK CHHOTI COPY KYUN. Parent ne jo definition di woh dekho: Term by term: woh hai jo hum compute karna chahte hain; woh number hai jo abhi hamare paas hai; aur bilkul wahi sawaal hai jo ek chhote number ke baare mein pucha gaya. Woh last piece hi poora trick hai — problem mein khud ka ek shrunk copy hai.
PICTURE. Neeche, har machine ek rounded box hai. Ek box tab tak finish nahi ho sakta jab tak uske andar ka chhota box finish nahi hota. Boxes Russian dolls ki tarah nest karte hain, tak shrink karte hue, jab tak sabse chhoti doll () ko kisi help ki zaroorat nahi hoti.

Step 2 — Stack NEECHE jaate hue bharta hai
KYA. Jab ko chahiye, woh khud ko pause karta hai aur ek note likhta hai: "Mujhe abhi bhi se multiply karna hai jab answer wapas aayega." Woh note ek stack frame hai — ek chhota memory box jo machine rakhti hai.
YEH PAUSE KYUN KARNA PADTA HAI. Multiplication abhi nahi ho sakti, kyunki abhi pata nahi. Toh machine half-done work park karti hai aur aur gehri dive karta hai. Har dive ek frame add karti hai.
PICTURE. Tower ko top-to-bottom padho. Har nayi call ek frame neeche add karti hai (yahi woh "piling up" hai jo parent ne mention kiya tha). Har frame ke right side mein pending work likha hua notice karo — wahi wait kar raha hai.

Har matlab hai "maine pause kiya aur ek chhote mujhse pucha". Chain rukti hai jaise hi tak pahunchti hai.
Step 3 — Stack UPAR jaate hue khaali hota hai (the unwind)
KYA. Base case turant return karta hai. Ab parked frames bottom-first jaag uthte hain, har ek apna ek waiting multiplication karta hai.
BOTTOM-FIRST KYUN. Woh frame jo sabse last mein add hua woh wala hai jiska chhota sawaal sabse pehle answer hua, toh woh pehle resume karta hai. Isi liye exactly ek stack use hota hai: last in, first out.
PICTURE. Wahi tower jo Step 2 mein tha, ab green return arrows ke saath bottom-to-top padho. Dekho kaise number upar travel karta hai, har floor par multiply hota hua: .

Har labelled brace woh value hai jo ek floor return karta hai; har arrow woh multiplication hai jo woh floor wait kar raha tha karne ke liye. Final hai .
Recall Factorial
kyun cost karta hai Iska recurrence hai : " ka work equals ka work plus ek chunk (ek single multiply)." Tower mein se tak har number ke liye ek floor hai: woh hai floors, har ek cost karta hai. itni baar add karne se milta hai, jo ke saath step mein badhta hai → . Dekho Big-O Notation.
Step 4 — Fibonacci: woh box jo DO boxes kholti hai
KYA. Factorial ne ek chhota box khola. Fibonacci ka rule do kholta hai: woh number hai jo chahiye; aur woh do chhote sawaal hain jo hume poochne padenge. Kyunki rule do steps peeche jaata hai, hume do base cases chahiye (, ) — warna ek branch se neeche gir jaayegi aur kabhi land nahi karegi.
YEH EK TREE KYUN BANATA HAI, TOWER NAHI. Ek box jo do boxes spawn kare, jo har ek do aur spawn kare, woh seedhi line nahi hai — woh branch karta hai. Wahi branching saari mushkil ka source hai.
PICTURE. ke liye call tree. Har node par split follow karo. label wale do nodes circle karo: unhe alag branches mein compute kiya jaata hai jo kabhi ek doosre se baat nahi karte.

Step 5 — Naive tree slow kyun hai (the derivation)
KYA. ko naive ke calls ki number maano. (for ) ka har call exactly ke calls plus ke calls karta hai, plus khud: Yeh same shape hai Fibonacci recurrence ki tarah — calls ki count Fibonacci numbers ki tarah badhti hai.
KYUN BADHTA HAI, NAHI. Agar har box do full-size boxes kholti, toh count har level par double hota → . Lekin aisa hota nahi: ek branch size ki hai aur doosri sirf ki — doosri branch chhoti hai, toh tree lopsided hai, full doubling nahi. Sacchi growth rate woh number hai jo sequence ke apne multiply-rule ko satisfy karta hai: Term by term: hai "do steps of growth", aur woh equals hai " (ek step) plus " — exactly wahi reach-back-one-and-two pattern. Toh mein ek ka har increase work ko roughly se multiply karta hai ( se nahi), giving . Doubling se slower, lekin phir bhi explosive.
PICTURE. Wahi tree, ab repeated subtrees same colour se paint ki hui. Kisi bhi colour ki har extra copy pure wasted recomputation hai — aur kisi bhi node ke neeche dono branches visibly unequal height ki hain, isi liye base hai aur nahi.

Step 6 — Memoization: duplicates ko cross out karo
KYA. Ek notebook (memo) rakho jo "" → "" map kare. compute karne se pehle, notebook mein dekho. Agar wahan hai, turant wapas do; agar nahi, ek baar compute karo aur likh lo.
YEH TREE KYUN COLLAPSE KARTA HAI. Pehli baar solve karne ke baad, har doosra node ek instant lookup ban jaata hai — uska poora subtree delete ho jaata hai. Branching tree ek slim path mein flatten ho jaati hai.
PICTURE. tree jisme duplicate subtrees cross out hain aur "cache hit" tag se replace hain. Jo bacha woh ek thin chain hai — sirf genuine computations.

Arrow padho: "notebook add karna exponential ko linear mein badal deta hai."
Step 7 — Binary search: ek baar mein aadhi picture phenk dena
KYA. Ek sorted list di gayi hai, hum target ko middle element se compare karte hain aur woh half discard karte hain jisme woh ho nahi sakta. lo aur hi woh region ke left aur right edges hain jo abhi bhi play mein hain; mid hai middle index .
MIDDLE KYUN, AUR SORTED KYUN. Ek sorted list mein, mid ke left ka sab kuch chhota hai aur right ka sab kuch bada. Toh middle par ek comparison safely poore half ko rule out kar deta hai — lekin sirf isliye kyunki order guarantee karta hai. Unsorted data par "aadha throw away" logic ek jhooth hai.
PICTURE. List mein search karna. Teen shrinking bars: greyed-out region woh half hai jo throw away kiya; highlighted region woh hai jo bacha; arrow har round mein mid mark karta hai. Round 1 middle value check karta hai; kyunki hum right half rakhte hain. Round 2 check karta hai; kyunki hum left half rakhte hain. Round 3 exactly par land karta hai aur uska index return karta hai. Picture left-to-right, top-to-bottom padho — har number aur decision uspar drawn hai.

KYUN. Iska recurrence hai : " items ka work equals unke half ka work, plus ek chunk (single middle comparison)." se start karke repeatedly half karte hue — — lagbhag halvings lagte hain, har ek cost karta hai. Toh total hai lagbhag → .
Step 8 — Edge cases jinhe kabhi miss nahi karna chahiye
KYA & KYUN. Har recursion mein quiet corners hote hain. Unhe draw karo taaki koi reader kabhi surprised na ho:
factorial(0)— base case turant fire hota hai, return karta hai. Koi dive nahi. (Sabse chhota problem directly answer.)fib(0)aurfib(1)— dono base cases; agar missing hote toh koi bhi se neeche recurse karta.- Binary search, target absent (e.g. ): region tab tak half hota rehta hai jab tak
lo > hi— ek empty range. Woh "not found" base case hai; woh return karta hai. - Binary search on an empty list:
hi = len(arr)-1 = -1, tohlo(0) > hi(-1)pehli call par hi true hai → zero comparisons ke saath return karta hai.
PICTURE. "Target absent" path: lo aur hi cross over karte hain, koi bars highlighted nahi — woh moment jab recursion "not found" ke saath rukti hai.

Ek-picture summary
Teeno recursions ek canvas par: factorial ka seedha tower (har step , cost ), Fibonacci ka branching tree notebook se collapse hua, aur binary search ki halving bars (cost ). Teen silhouettes — ek seedha column, ek lopsided tree, aur shrinking bars — poora page ek nazar mein.

Recall Feynman: plain words mein poora walkthrough
Recursion ek stack of paused workers hai. Factorial: worker tab tak finish nahi kar sakta jab tak worker finish nahi karta, jo worker ka wait karta hai, jo worker ka wait karta hai — woh akela jo seedha answer jaanta hai. Worker kehta hai "", aur answer upar climb karta hai, har floor par multiply hota: . Fibonacci same karta hai lekin har worker do helpers ko call karta hai, toh agar koi kuch nahi likhta toh wahi chhote sawaal mountain of times dobara pooche jaate hain — unhe ek notebook mein likh lo aur mountain flatten ho jaata hai. Binary search ek worker hai jo sorted phone book mein dekh raha hai: middle kholो, woh half throw away karo jisme tumhara naam nahi ho sakta, repeat karo. Har glance book ka aadha delete karta hai, toh tum lagbhag glances mein done ho. Jab book mein throw away karne ke liye kuch nahi bachta, naam wahan tha hi nahi.
Connections
- Recursion vs Iteration — tower aur halving pictures loops ban jaate hain
- Big-O Notation — , , kahan se aate hain
- Memoization and Dynamic Programming — Step 6 mein notebook
- Divide and Conquer — binary search halving picture hai
- The Call Stack and Stack Frames — Steps 2–3 mein towers
- Sorting Algorithms — binary search ka precondition