العودة إلى الدورة

الدرس الخامس عشر: العودية مقابل التكرار (Iteration)

الخوارزميات: من الصفر إلى الاحتراف (دليل المبتدئين)

15. العودية مقابل التكرار (Iteration)

يمكن حل أي مشكلة قابلة للحل بالعودية أيضاً بشكل تكراري (باستخدام الحلقات مثل for أو while).

التكرار (Iteration - الحلقات)

  • الآلية: يستخدم الحلقات ويقوم بتحديث متغيرات الحالة بشكل صريح.
  • الإيجابيات: بشكل عام تنفيذ أسرع، استخدام أفضل للذاكرة (لا يوجد تعميق لـ call stack).
  • السلبيات: قد يكون مطولاً أو معقداً في بعض الأحيان للمشكلات العودية بطبيعتها (مثل معالجة الأشجار).

العودية (Recursion)

  • الآلية: تستخدم مكدس استدعاءات الدوال (function call stack) ضمنياً لإدارة الحالة.
  • الإيجابيات: غالباً ما تؤدي إلى كود أبسط وأكثر أناقة وقابلية عالية للقراءة لأنواع معينة من المشكلات.
  • السلبيات: أبطأ بسبب النفقات العامة لاستدعاء الدالة، وتعقيد مكاني عالٍ بسبب استخدام مكدس الاستدعاءات (قد تسبب stack overflow إذا كانت عميقة جداً).

متى تستخدم أيهما؟ إذا كانت المشكلة تحتوي على هيكل عودي طبيعي (مثل توليد الفركتلات، اجتياز الأشجار)، فغالباً ما يُفضل استخدام العودية للوضوح. بخلاف ذلك، يكون التكرار عادةً أفضل أداءً.