ما هو الـ Recursion؟
Recursion هو أسلوب برمجي تقوم فيه الدالة باستدعاء نفسها لحل مشكلة معينة.
بدلًا من استخدام حلقات التكرار مثل for أو while، يمكن للدالة أن تستمر في استدعاء نفسها حتى يتحقق شرط معين، ثم تتوقف.
ولهذا السبب، يجب أن يحتوي أي Recursion على شرط للتوقف (Base Case)، وإلا ستستمر الدالة في استدعاء نفسها إلى ما لا نهاية.
مثال
لنفترض أننا نريد زيادة متغير حتى تصبح قيمته أكبر من 10.
let total = 0;
function addToTotal(num) { total += num;
if (total > 10) { console.log("Total is now greater than 10"); return; }
console.log(total);
addToTotal(num);}
addToTotal(1);ماذا يحدث؟
في البداية تكون قيمة total:
0;ثم في كل مرة تُستدعى فيها الدالة، يتم تنفيذ:
total += num;وهذا مكافئ تمامًا لكتابة:
total = total + num;بعد ذلك يتم التحقق من الشرط:
if (total > 10)إذا أصبح total أكبر من 10، تتوقف الدالة.
أما إذا لم يتحقق الشرط، فإن الدالة تستدعي نفسها مرة أخرى:
addToTotal(num);وهكذا تستمر العملية حتى يتحقق شرط التوقف.
لماذا استخدمنا return؟
داخل الشرط كتبنا:
return;في هذه الحالة لا نُرجع أي قيمة.
استخدمنا return فقط لإيقاف تنفيذ الدالة ومنعها من استدعاء نفسها مرة أخرى.
بدون هذا الشرط، ستستمر الدالة في الاستدعاء الذاتي حتى يحدث خطأ مثل Stack Overflow.
متى نستخدم Recursion؟
يمكن حل هذا المثال باستخدام حلقة تكرار، لكنه يوضح فكرة Recursion.
يُستخدم الاستدعاء الذاتي في كثير من المشكلات، مثل:
- استعراض المجلدات والملفات.
- التعامل مع الأشجار (Trees).
- البحث داخل الهياكل المتداخلة.
- بعض الخوارزميات الرياضية.
ماذا يجب أن تتذكر؟
- Recursion يعني أن الدالة تستدعي نفسها.
- يجب أن يحتوي الاستدعاء الذاتي على شرط للتوقف (Base Case).
returnيمكن استخدامه لإيقاف الاستدعاء المتكرر.- بدون شرط للتوقف ستستمر الدالة في الاستدعاء حتى يحدث Stack Overflow.