أساسيات الاستدعاء الذاتي
جزء من قسم الأساسيات في رحلة C على Coddy. الدرس 50 من 63.
الاستدعاء الذاتي هو أسلوب تستدعي فيه function نفسها لحل مشكلة. يشبه ذلك حل مشكلة كبيرة من خلال تقسيمها إلى مشكلات أصغر ومماثلة.
لنلقِ نظرة على دالة Recursive بسيطة تحسب factorial:
int factorial(int n) {
// الحالة الأساسية: مضروب 0 أو 1 هو 1
if (n <= 1) {
return 1;
}
// الحالة التكرارية: n! = n * (n-1)!
return n * factorial(n - 1);
}تحتاج كل دالة Recursive إلى:
- حالة أساسية لإيقاف الاستدعاء التكراري
- حالة تكرارية تقترب من الحالة الأساسية
على سبيل المثال، حساب factorial(3):
- يستدعي factorial(3) الدالة factorial(2)
- يستدعي factorial(2) الدالة factorial(1)
- تعيد factorial(1) القيمة 1 (حالة Base)
- تعيد factorial(2) القيمة 2 * 1 = 2
- تعيد factorial(3) القيمة 3 * 2 = 6
التحدي
سهلأنشئ function باسم sumToN تستخدم الاستدعاء الذاتي لحساب مجموع الأعداد من 1 إلى n.
على سبيل المثال:
- يجب أن تُرجع sumToN(3) القيمة 6 (1 + 2 + 3)
- يجب أن تُرجع sumToN(5) القيمة 15 (1 + 2 + 3 + 4 + 5)
يجب أن تقوم function بما يلي:
- استخدم حالة Base عندما تكون n تساوي 1 (return 1)
- خلاف ذلك، أرجع n مضافًا إليها مجموع الأعداد من 1 إلى (n-1)
جرّب بنفسك
#include <stdio.h>
// اكتب دالة sumToN الخاصة بك هنا
// لا تغيّر دالة main()
int main() {
int n;
scanf("%d", &n);
printf("%d", sumToN(n));
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4تدفق التحكم
جملة Ifجملة If - Elseجملة Else-Ifجملة Switch Caseالعامل الشرطي الثلاثيتحدي المراجعةجمل If - Else المتداخلة7الدوال
التصريح عن دالةأنواع الإرجاعالمعاملاتتحدي المراجعة #1أساسيات الاستدعاء الذاتيالنماذج الأولية للدوالتحدي المراجعة #22المتغيرات
أنواع البياناتالأعداد الصحيحة (Integer)الأعداد العشرية (Float - Double)المحارف (Characters)القيم المنطقية (Booleans)الثوابتأساسيات printfقواعد تسمية المتغيراتتحويل الأنواع (Type Casting) - الجزء 1تحويل الأنواع (Type Casting) - الجزء 2تحدي المراجعة3المعاملات
المعاملات الحسابيةمعامل باقي القسمةالزيادة والنقصانمعاملات الإسنادالمعاملات العلائقيةالمعاملات المنطقية - الجزء الأولالمعاملات المنطقية - الجزء الثانيالمعاملات المنطقية - الجزء الثالثتحدي المراجعةتدرّب بنفسك: مترجم C عبر الإنترنت