ما معنى Recursion؟
التكرار أو الـ Recursion هو مفهوم برمجي يشير إلى قدرة الدالة على استدعاء نفسها أثناء تنفيذها. بعبارة أخرى، الدالة تقوم بحل جزء من المشكلة ثم تعيد استدعاء نفسها لحل نفس النوع من المشكلة ولكن بحجم أصغر أو أسهل، وهكذا حتى تصل إلى حالة أساسية يتم فيها وقف الاستدعاء.
شرح مفهوم التكرار (Recursion) بشكل مبسط
التكرار هو أسلوب قوي في البرمجة يستخدم لتبسيط حل المشكلات التي يمكن تقسيمها إلى أجزاء متشابهة أو متكررة. بدلاً من كتابة كود معقد يتعامل مع كل حالة على حدة، يمكن للدالة استخدام التكرار لحل المشكلة خطوة بخطوة.
مثلاً، إذا أردنا حساب قيمة عدد في ترتيب فيبوناتشي أو مضروب عدد معين، نستخدم التكرار حيث تقوم الدالة بحل الأجزاء الأصغر بنفس الطريقة التي حلّت بها الأجزاء الأكبر.
مكونات الدالة التكرارية
لكي تعمل الدالة التكرارية بشكل صحيح، يجب أن تحتوي على جزأين أساسيين:
- الحالة الأساسية (Base Case): وهي الحالة التي توقف التكرار عندها، لمنع الاستدعاءات من أن تتكرر إلى ما لا نهاية.
- الاستدعاء التكراري (Recursive Call): حيث تستدعي الدالة نفسها بمعطيات أبسط أو أصغر للوصول تدريجياً إلى الحالة الأساسية.
أمثلة توضيحية
كمثال بسيط، لحساب مضروب عدد صحيح موجب (n!) يمكن كتابة دالة تكرارية كما يلي:
إذا كان n = 1 أو 0، فالقيمة تساوي 1 (الحالة الأساسية). أما إذا كان n أكبر من ذلك، فـ n! = n × (n-1)!* وهنا الدالة تستدعي نفسها مع القيمة (n-1).
الفائدة من استخدام التكرار
يتميز التكرار بالوضوح والبساطة عندما تستخدم بشكل صحيح، كما يسهل التعبير عن حلول لمشكلات معقدة مثل البحث في الهياكل الشجرية (كالشجرات الثنائية) أو تصنيف البيانات، بالإضافة إلى متطلبات برمجية مثل خوارزميات التراجع (Backtracking).
لكن يجب الحذر من استخدام التكرار بلا حدود أو بدون حالة أساسية واضحة، لأن ذلك قد يؤدي إلى استهلاك زائد للذاكرة وحدوث أخطاء تجاوز سعة المكالمات (Stack Overflow).