Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الدوال العودية

جزء من قسم Logic & Flow في رحلة PHP على Coddy — الدرس 8 من 68.

العودية (Recursion) هي تقنية برمجية تقوم فيها الدالة باستدعاء نفسها لحل مشكلة ما. يؤدي هذا إلى إنشاء سلوك يشبه الحلقة، ولكن بدلاً من استخدام الحلقات التقليدية، تقوم الدالة باستدعاء نفسها بشكل متكرر بمعاملات معدلة حتى تصل إلى حل.

كل دالة عودية (recursive function) يجب أن تحتوي على مكونين أساسيين لتعمل بشكل صحيح:

الحالة الأساسية: هذا هو الشرط الذي يوقف التكرار (العودية). بدونه، ستستدعي الدالة نفسها بشكل لا نهائي، مما يتسبب في تعطل برنامجك. تحدد الحالة الأساسية متى يجب أن تعيد الدالة نتيجة بدلاً من استدعاء نفسها مرة أخرى.

الخطوة العودية: هذا هو المكان الذي تستدعي فيه الدالة نفسها بنسخة معدلة من المشكلة الأصلية، مما يقربها تدريجياً من الحالة الأساسية.

إليك مثال بسيط لدالة عودية تحسب المضروب (factorial):

<?php
function factorial($n) {
    // الحالة الأساسية: مضروب 1 هو 1
    if ($n <= 1) {
        return 1;
    }
    
    // الخطوة العودية: n! = n * (n-1)!
    return $n * factorial($n - 1);
}

echo factorial(5);  // المخرجات: 120
?>

في هذا المثال، يستدعي factorial(5) الدالة factorial(4)، والتي تستدعي factorial(3)، وهكذا، حتى يصل إلى factorial(1) (الحالة الأساسية). ثم تُضرب النتائج تصاعدياً: 1 × 2 × 3 × 4 × 5 = 120.

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

challenge icon

التحدي

سهل

قم بإنشاء دالة تكرارية (recursive function) تسمى sumDigits تأخذ عدداً صحيحاً موجباً وتعيد مجموع أرقامه. يجب أن تستخدم الدالة التكرار لتقسيم الرقم رقماً تلو الآخر.

ستتلقى مدخلاً واحداً: عدد صحيح موجب. اقرأ المدخل، واستدعِ دالتك التكرارية بهذا الرقم، ثم اطبع مجموع أرقامه.

تنسيق المدخلات: سطر واحد يحتوي على عدد صحيح موجب

المخرجات المتوقعة: مجموع كل الأرقام المكونة للعدد

ورقة مرجعية

العودية (Recursion) هي تقنية برمجية تستدعي فيها الدالة نفسها لحل مشكلة ما. تحتاج كل دالة عودية إلى مكونين:

الحالة الأساسية (Base Case): الشرط الذي يوقف العودية لمنع الحلقات اللانهائية.

الخطوة العودية (Recursive Step): حيث تستدعي الدالة نفسها بمعاملات معدلة، متجهة نحو الحالة الأساسية.

مثال على دالة المضروب (factorial) العودية:

<?php
function factorial($n) {
    // الحالة الأساسية: مضروب 1 هو 1
    if ($n <= 1) {
        return 1;
    }
    
    // الخطوة العودية: n! = n * (n-1)!
    return $n * factorial($n - 1);
}

echo factorial(5);  // المخرجات: 120
?>

جرّب بنفسك

<?php
// قراءة المدخلات
$number = intval(fgets(STDIN));

// TODO: قم بإنشاء دالة sumDigits العودية هنا


// استدعاء الدالة وطباعة النتيجة
echo sumDigits($number);
?>
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow