الدوال العودية الجزء الثاني
جزء من قسم Logic & Flow في رحلة Python على Coddy — الدرس 61 من 78.
عادةً ما تتكون الدوال العودية (Recursive functions) من جزأين:
- الحالة الأساسية (Base Case): تحدد متى يجب أن يتوقف التكرار العودي.
- الخطوة العودية (Recursive Step): تستدعي الدالة نفسها بمدخلات أصغر.
مثال: حساب المضروب (factorial) باستخدام العودية (recursion):
def factorial(n):
if n == 1: # الحالة الأساسية
return 1
return n * factorial(n - 1) # استدعاء عودي
print(factorial(5)) # المخرجات: 120هنا، تستمر الدالة في استدعاء نفسها بـ n - 1 حتى تصل إلى 1، حيث يتوقف التكرار (recursion).
مثال: عكس سلسلة نصية:
def recursive_reverse(s):
if len(s) <= 1: # الحالة الأساسية: سلسلة فارغة أو من حرف واحد
return s
else:
return recursive_reverse(s[1:]) + s[0] # الخطوة العودية
text = "hello"
result = recursive_reverse(text)
print(result)
# المخرجات: ollehفي هذا المثال، تقوم الدالة recursive_reverse باستدعاء نفسها مع بقية السلسلة النصية (s[1:]) حتى تصبح السلسلة فارغة أو تحتوي على حرف واحد فقط. يقوم كل استدعاء بإلحاق الحرف الأول بنتيجة الاستدعاء العودي، مما يؤدي فعلياً إلى عكس السلسلة النصية.
التحدي
سهلاكتب دالة عودية (recursive function) تسمى fibonacci تأخذ عدداً صحيحاً موجباً n كوسيط (argument) وتعيد رقم فيبوناتشي النوني (nth Fibonacci number). يتم تعريف تسلسل فيبوناتشي كما يلي:
fibonacci(1) = 0fibonacci(2) = 1fibonacci(n) = fibonacci(n-1) + fibonacci(n-2)عندماn > 2.
مثال للمدخلات:
n = 6مثال للمخرجات:
5ورقة مرجعية
تتكون الدوال العودية (Recursive functions) من جزأين أساسيين:
- الحالة الأساسية (Base Case): تحدد متى يجب أن يتوقف التكرار
- الخطوة العودية (Recursive Step): تستدعي الدالة نفسها بمدخلات أصغر
مثال المضروب (Factorial):
def factorial(n):
if n == 1: # الحالة الأساسية
return 1
return n * factorial(n - 1) # استدعاء عودي
print(factorial(5)) # المخرج: 120مثال عكس السلسلة النصية:
def recursive_reverse(s):
if len(s) <= 1: # الحالة الأساسية: سلسلة فارغة أو من حرف واحد
return s
else:
return recursive_reverse(s[1:]) + s[0] # الخطوة العودية
text = "hello"
result = recursive_reverse(text)
print(result) # المخرج: ollehجرّب بنفسك
def fibonacci(n):
# اكتب الكود هنايتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1استكشاف المتغيرات
الثوابتإسناد المتغيرات المتعددةتبديل المتغيراتالمتغيرات النائبةتقريب الأرقامتحويل القوائم4تطبيق سجل جهات الاتصال
عرض القائمةإضافة جهة اتصال7المجموعات - الجزء الثاني
العمليات الرياضية - الجزء الأولالعمليات الرياضية - الجزء الثانيمراجعة - البحث عن الكنزالمجموعات الجزئية والمجموعات الشاملةالتكرار عبر المجموعاتمراجعة - متتبع البطولة10أساسيات تضمين القوائم (List Comprehensions)
الصيغة البرمجيةإنشاء قوائم بسيطةإضافة الشروطاستخدام تجميع البياناتمراجعة - بيت القوائممراجعة - عناصر الحرية5اتخاذ القرارات المتقدم
المعامل الثلاثيالتحقق من الانتماءالتحقق من الهويةأخطاء الإزاحةمراجعة - فلتر العطلات8مدير سجلات الطلاب
نظرة عامة على المشروعإضافة طالب11الدوال المتقدمة
إرجاع قيم متعددةدوال Lambda الجزء الأولدوال Lambda الجزء الثانيتحدي المراجعة - فرز Lambdaالدوال العودية الجزء الأولالدوال العودية الجزء الثانيمراجعة - جمع القوائم المتداخلة3القواميس - الجزء الثاني
دوال القواميسالقواميس المتداخلةالتحقق من وجود المفاتيحالتكرار عبر القواميسمراجعة - عداد التكرار9تجميع البيانات المتقدم
استخدام Sumإيجاد الحد الأدنى والأقصىفرز البيانات بكفاءةمراجعة - Dictionary Sorter12أساسيات معالجة الأخطاء
ما هي معالجة الأخطاء؟كتلة Try و Exceptالتعامل مع استثناءات متعددةمراجعة - أخطاء عربة التسوق