English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دروس أساسية بلغة C

تحكم في عملية لغة C

C 语言函数

C 语言数组

C 语言指针

C 语言字符串

مباني لغة C

ملفات لغة C

C أخرى

دليل مرجعي للغة C

C 语言递归

في هذا الدرس، ستتعلم كيفية كتابة دالة تكرار متبادل باستخدام لغة البرمجة C من خلال مثال.

الدالة التي تستدعي نفسها تُسمى دالة تكرار متبادل. ويُسمى هذا التقنية التكرار المتبادل.

كيف يعمل التكرار المتبادل؟

void recurse()
{
    ... .. ...
    recurse();
    ... .. ...
}
int main()
{
    ... .. ...
    recurse();
    ... .. ...
}

يستمر التكرار المتبادل حتى يتم تحقيق بعض الشروط لمنع التكرار المتبادل.

لمنع التكرار المتبادل غير المحدود، يمكن استخدام دعوة التكرار المتبادل في فرع واحد فقط، بينما لا يتم في الفرع الآخر.استخدام جمل if ... else(أو طريقة مشابهة).

مثال: استخدام التكرار المتبادل للحصول على مجموع الأعداد الطبيعية

#include <stdio.h>
int sum(int n);
int main() {
    int number, result;
    printf("أدخل عدد صحيح إيجابي: ");
    scanf("%d", &number);
    result = sum(number);
    printf("sum = %d", result);
    تعود 0;
}
int sum(int n) {
    if (n != 0)
        // دالة sum() تستدعي نفسها
        تعود n + sum(n-1); 
    else
        تعود n;
}

نتيجة الإخراج

أدخل عدد صحيح إيجابي: 3
sum = 6

في البداية، يتم استدعاء دالة sum() من دالة main()، ويتم إرسال number كمعامل.

إذاً، يتم تعيين القيمة الابتدائية لـ sum() إلى 3. في الدعوة التالية للدالة، يتم إرسال 2 إلى دالة sum(). يتم هذا العمل حتى يتم الوصول إلى n يساوي 0.

عندما يكون n يساوي 0، تفشل شرط if، وتُنفذ الجزء else، ويعود الناتج النهائي إلى دالة main().

递归的优缺点

递归使程序优雅。但是,如果性能至关重要,请使用循环代替,因为递归通常要慢得多。

尽管如此,递归是一个重要的概念。它经常用于数据结构和算法中。例如,在诸如树遍历之类的问题中通常使用递归。