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.

challenge icon

التحدي

سهل

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

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

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

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

جرّب بنفسك

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

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


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

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

جميع دروس Logic & Flow