Menu
CoddyTech

أساسيات الاستدعاء الذاتي

جزء من قسم الأساسيات في رحلة 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);
}

تحتاج كل دالة递归ية إلى:

  1. حالة أساسية لإيقاف الاستدعاء التكراري
  2. حالة تكرارية تقترب من الحالة الأساسية

على سبيل المثال، حساب factorial(3):

  • يستدعي factorial(3) ‏factorial(2)
  • يستدعي factorial(2) ‏factorial(1)
  • يعيد factorial(1) القيمة 1 (الحالة الأساسية)
  • تعيد factorial(2) القيمة 2 * 1 = 2
  • تعيد factorial(3) القيمة 3 * 2 = 6
challenge icon

التحدي

سهل

أنشئ دالة باسم sumToN تستخدم الاستدعاء الذاتي لحساب مجموع الأعداد من 1 إلى n.

على سبيل المثال:

  • ينبغي أن تُعيد sumToN(3) القيمة 6 (1 + 2 + 3)
  • ينبغي أن تُعيد sumToN(5) القيمة 15 (1 + 2 + 3 + 4 + 5)

ينبغي أن تؤدي دالتك ما يلي:

  1. استخدم حالة أساسية عندما تكون n تساوي 1 (أعِد 1)
  2. وإلا، فأعِد n زائد مجموع الأعداد من 1 إلى (n-1)

جرّب بنفسك

#include <stdio.h>

// اكتب دالتك sumToN هنا

// لا تغيّر الدالة main()
int main() {
    int n;
    scanf("%d", &n);
    
    printf("%d", sumToN(n));
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات

تدرّب بنفسك: مترجم C عبر الإنترنت