الدرس الأول
انظر إلى الشكل: عندما تفتح صندوقاً لتجد داخله صندوقاً أصغر وتكرر الفعل نفسه، فهذا هو الاستدعا الذاتي أو Recursion في علوم الحاسب. بدلاً من حل المشكلة دفعة واحدة، أنت تقسمها إلى مشكلات أصغر متشابهة جداً. في المخطط التدفقي، تكرر العملية ببيانات أقل تعقيداً حتى تصل إلى الهدية المنشودة وينتهي الاستدعا الذاتي.
يقوم الاستدعاء الذاتي على فكرة أن تقسم المشكلة الكبيرة إلى مجموعة من المشكلات الصغيرة المشابهة لها، وذلك بأن تستخدم الخوارزمية نفسها لحل تلك المشكلات. تتكون دالة الاستدعاء التكرارية من حالتين رئيسيتين: الحالة الأساسية وهي نقطة التوقف التي تمنع الاستدعاء اللانهائي، وحالة الاستدعاء التكرارية التي تستدعي فيها الدالة نفسها عندما لا يتحقق شرط التوقف. على سبيل المثال، لحساب مضروب الرقم 3، تستدعي الدالة نفسها لتضرب 3 في مضروب 2، ثم تستدعي نفسها لتضرب 2 في مضروب 1، حتى تصل إلى الحالة الأساسية عند الرقم 0 وتتوقف، ليصبح الناتج النهائي 6.
الفكرة الأساسية
يقوم الاستدعاء الذاتي على تقسيم المشكلة الأصلية إلى مجموعة من المشكلات الصغيرة المشابهة لها، وذلك باستخدام الخوارزمية نفسها لحل كل جزء حتى تصل إلى أبسط حالة ممكنة.
الشرح
تتكون دالة الاستدعاء التكرارية من حالتين أساسيتين:
- الحالة الأساسية: هي نقطة التوقف، ففيها تتوقف الدالة عن استدعاء نفسها وتتأكد من الوصول إلى هذه الحالة من خلال أمر مشروط. بدون الحالة الأساسية، ستتكرر عملية الاستدعاء الذاتي إلى ما لا نهاية.
- حالة الاستدعاء التكرارية: وفيها تستدعي الدالة نفسها عندما لا يتحقق شرط التوقف، وتظل الدالة في الاستدعاء الذاتي حتى تصل إلى الحالة الأساسية. وإذا حدث استدعاء تكراري بدون شرط محدد للتوقف، يحدث الاستدعاء التكراري اللانهائي، والذي يسبب توقف النظام عن الاستجابة بسبب كثرة استدعاءات الدالة، مما يؤدي إلى فيض الذاكرة وإنهاء التطبيق.
مثال محلول خطوة بخطوة
لحساب مضروب الرقم 3 باستخدام دالة الاستدعاء التكرارية:
- الدالة المعرفة هي def factorial(x):
- تفحص الشرط: هل ؟ في المرة الأولى ، إذن الشرط خاطئ.
- تنتقل إلى الجزء الآخر: تُرجع .
- تتكرر العملية مع لتصبح .
- ثم مع لتصبح .
- عندما يصل إلى ، يتحقق الشرط الأساسي وتُرجع الدالة القيمة .
- تعود النتيجة لتتجمع العمليات: ثم ثم .
- الناتج النهائي لمضروب 3 هو .
أخطاء شائعة
- نسيان وضع الحالة الأساسية أو شرط التوقف الصحيح، مما يؤدي إلى الاستدعاء اللانهائي وفيض الذاكرة.
- الاعتقاد بأن الاستدعاء التكراري أسرع في التنفيذ من التكرار العادي، بينما هو في الواقع أبطأ مقارنة بالتكرار ويطلب حجماً أكبر للذاكرة.
سؤالان للتدريب مع الإجابة
السؤال الأول: ما الحالات التي تتكون منها دالة الاستدعاء التكرارية؟ الإجابة: الحالة الأساسية (Base Case) وحة الاستدعاء التكرارية (Recursive Case). السؤال الثاني: ما النتيجة المترتبة على عدم وجود شرط محدد لتوقف الاستدعاء التكراري؟ الإجابة: حدوث الاستدعاء التكراري اللانهائي، والذي يسبب فيض الذاكرة وتوقف النظام عن الاستجابة.