ما هي التعاوديّة؟
دالة تستدعي نفسها لحلّ مسألة أصغر من نفس النوع.
ركنان أساسيان
- حالة التوقّف (Base case): متى تتوقّف.
- الحالة التعاوديّة: استدعاء النفس بمدخل أصغر.
def factorial(n):
if n <= 1: # حالة التوقّف
return 1
return n * factorial(n - 1) # تعاوديّة
فيبوناتشي
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)
⚠️ هذا الحلّ
O(2ⁿ)بطيء — يُحسَّن بالبرمجة الديناميكية (درس لاحق).
التعاوديّة والمكدّس
كل استدعاء يُوضع على call stack. نسيان حالة التوقّف → stack overflow.
متى نستخدمها؟
- الأشجار والرسوم البيانية.
- المسائل التي تنقسم لمسائل فرعية متشابهة (divide & conquer).
🎯 التالي: الأشجار (Trees).