أساسيات الاستدعاء الذاتي
جزء من قسم الأساسيات في رحلة C على Coddy. الدرس 50 من 63.
الاستدعاء الذاتي هو أسلوب تستدعي فيه الدالة نفسها لحل مشكلة. يشبه ذلك حل مشكلة كبيرة بتقسيمها إلى مشكلات أصغر ومتشابهة.
لنلقِ نظرة على دالة递归 بسيطة تحسب المضروب:
int factorial(int n) {
// الحالة الأساسية: مضروب 0 أو 1 يساوي 1
if (n <= 1) {
return 1;
}
// الحالة التكرارية: n! = n * (n-1)!
return n * factorial(n - 1);
}تحتاج كل دالة递归ية إلى:
- حالة أساسية لإيقاف الاستدعاء التكراري
- حالة تكرارية تقترب من الحالة الأساسية
على سبيل المثال، حساب factorial(3):
- يستدعي factorial(3) factorial(2)
- يستدعي factorial(2) factorial(1)
- يعيد factorial(1) القيمة 1 (الحالة الأساسية)
- تعيد factorial(2) القيمة 2 * 1 = 2
- تعيد factorial(3) القيمة 3 * 2 = 6
التحدي
سهلأنشئ دالة باسم sumToN تستخدم الاستدعاء الذاتي لحساب مجموع الأعداد من 1 إلى n.
على سبيل المثال:
- ينبغي أن تُعيد sumToN(3) القيمة 6 (1 + 2 + 3)
- ينبغي أن تُعيد sumToN(5) القيمة 15 (1 + 2 + 3 + 4 + 5)
ينبغي أن تؤدي دالتك ما يلي:
- استخدم حالة أساسية عندما تكون n تساوي 1 (أعِد 1)
- وإلا، فأعِد n زائد مجموع الأعداد من 1 إلى (n-1)
جرّب بنفسك
#include <stdio.h>
// اكتب دالتك sumToN هنا
// لا تغيّر الدالة main()
int main() {
int n;
scanf("%d", &n);
printf("%d", sumToN(n));
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4تدفق التحكم
عبارة ifif - elseelse-ifswitch caseالمعامل الشرطي الثلاثيتحدي المراجعةعبارات if - else متداخلة7الدوال
تعريف دالةأنواع الإرجاعالمعلماتتحدي المراجعة #1أساسيات الاستدعاء الذاتيالتصريحات الأولية للدوالتحدي المراجعة #23المعاملات
المعاملات الحسابيةمعامل باقي القسمةالزيادة والنقصانمعاملات الإسنادالمعاملات العلائقيةالمعاملات المنطقية - الجزء 1المعاملات المنطقية - الجزء 2المعاملات المنطقية - الجزء 3تحدي المراجعةتدرّب بنفسك: مترجم C عبر الإنترنت