Foundationপ্রথম নীতি থেকে
LEVEL 0 · Mathematical Foundations

Recursion

পুনরাবৃত্তি

একটা function যা নিজেকে ছোট input-এ ডাকে। Base case থামায়, recursive case ছোট ফল থেকে বড় ফল বানায়। Induction-এর computational রূপ।

def factorial(n):
    if n == 0: return 1          # base case
    return n * factorial(n - 1)  # recursive case

Correctness প্রমাণ হয় [[induction]] দিয়ে, আর termination প্রমাণ হয় [[well-ordering-principle]] দিয়ে — argument কঠোরভাবে কমছে এবং অ-ঋণাত্মক।

গাণিতিক induction অসীম পর্যন্ত চলে; বাস্তব recursion সসীম stack-এ চলে। এই ফাঁকটাই stack overflow।

ulimit -s          # সাধারণত 8192 KB

8 MB stack, প্রতি frame ~32 byte → প্রায় ২,৬০,০০০ frame। তারপর segfault।

Tail call optimization: recursive call-এর পরে আর কোনো কাজ না থাকলে compiler নতুন frame না বানিয়ে বর্তমানটা পুনর্ব্যবহার করতে পারে — recursion কার্যত loop হয়ে যায়।

gcc -O0 prog.c   # segfault
gcc -O2 prog.c   # চিরকাল চলে — TCO প্রয়োগ হয়েছে

Scheme, Erlang আর Haskell-এ TCO বাধ্যতামূলক, তাই সেখানে recursion-ই প্রধান loop। Python ইচ্ছাকৃতভাবে করে না — stack trace রক্ষার জন্য।