الدرس العاشر(100):الإستدعاء الذاتي للدوال في بايثون-Recursion


التقنيات الجديدة في البرمجة تبهرنا في كل مرة،خصوصا عندما يتعلق اﻷمر بلغة البرمجة بايثون،فهي تجعل اﻷمور تبدو أكثر سهولة من ذي قبل.ﻻ يخفى عنا بأن الدوال سهلت كثيرا من عملية البرمجة و لوﻻها لما رأينا العديد من البرامج المعقدة و لما استطعنا تخيل وجودها من اﻷساس.

توفر لغات البرمجة تقنية تسمى اﻹستدعاء الذاتي Recursion و التي تعني إستدعاء الدالة داخل الدالة نفسها و بالتالي سننشئ حلقة تكرارية داخلية،لنأخذ مثال مضروب العدد في الدرس السابق...

في هذا المثال قمنا بحساب مضروب العدد عن طريق الحلقة التكرارية و بالتالي سنطلب من مفسر بايثون أن يقوم بالدوران في كل مرة باﻹعتماد على نتيجة الدورة السابقة و هذا ما سيسبب إستهلاكا أكبر لموارد الجهاز خصوصا إن كان العدد كبيرا جدا.

عند إنشاء الدوال في بايثون فإنه سيتم إنشاء شبه بيئة( أو باﻷحرى قالب) و بالتالي إستهلاك أقل لموارد الجهاز من الحساب المتكرر...دعونا نرى المثال الموالي:

هنا قمنا بإنشاء دالة إسمها factorial لديها مادة أولية واحدة هي n،تقوم الدالة بالتحقق من n إن كان أقل تماما من 2 فإنها ستقوم بإرجاع القيمة 1 ﻷن مضروب 1 و 0 هو 1 بشكل إفتراضي،أما في حالة أن n كان أكبر من 2 فإنها ستقوم بأخذ n و تضعه في متغير إفتراضي و تقوم بإستدعاء نفسها و لكن بقيمة جديدة هي n-1 و تقوم بضرب قيمة المتغير اﻹفتراضي في ناتج عملية إستدعاء نفسها.لنأخذ مثاﻻ عمليا و هو الموجود في الصورة أعلاه:مضروب 6:
نقوم باستدعاء الدالة factorial مع العدد 6،ستقوم الدالة بوضع 6 في متغير إفتراضي و تقوم باستدعاء نفسها مع إنقاص 1 من 6 و بالتالي إستدعاء (5)factorial و هكذا في كل مرة تقوم الدالة بنفس العملية إلى أن تصل إلى 1 و هي القيمة اﻷقل تماما من 2 و تقوم بإرجاع القيمة 1 ثم تعود و تقوم بحساب ناتج آخر عملية مضروبا في المتغير الوهمي المنشئ من العملية السابقة و تصل إلى آخر عملية و هي (6)factorial و تقوم بإرجاع الناتج النهائي و هو في هذه الحالة 720.

خاصية الإستدعاء الذاتي مفيدة جدا خصوصا عندما يتعلق الأمر ببرمجة أنظمة معقدة و عندما تكون قضية تقليل إستهلاك الموارد أمرا مهما جدا

تعليقات

  1. ما فهمتهاش خالص على فكرة بالعكس انا توهت منك ممن تشرحها بشكل ابسط حبتين ... وادينى مثال تانى عليها
    وبالرك الله فيك

    ردحذف
    الردود
    1. ما الذي لم تفهمه أخي الكريم حتى أعيد شرحه من جديد

      حذف

إرسال تعليق

شاركنا رأيك حول الموضوع...