n = n*num
num -=1
print n
]]>
في هذا المثال قمنا بحساب مضروب العدد عن طريق الحلقة التكرارية و بالتالي سنطلب من مفسر بايثون أن يقوم بالدوران في كل مرة باﻹعتماد على نتيجة الدورة السابقة و هذا ما سيسبب إستهلاكا أكبر لموارد الجهاز خصوصا إن كان العدد كبيرا جدا.
عند إنشاء الدوال في بايثون فإنه سيتم إنشاء شبه بيئة( أو باﻷحرى قالب) و بالتالي إستهلاك أقل لموارد الجهاز من الحساب المتكرر…دعونا نرى المثال الموالي:
هنا قمنا بإنشاء دالة إسمها 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.
خاصية الإستدعاء الذاتي مفيدة جدا خصوصا عندما يتعلق الأمر ببرمجة أنظمة معقدة و عندما تكون قضية تقليل إستهلاك الموارد أمرا مهما جدا
2 تعليقان. Leave new
ما فهمتهاش خالص على فكرة بالعكس انا توهت منك ممن تشرحها بشكل ابسط حبتين … وادينى مثال تانى عليها
وبالرك الله فيك
ما الذي لم تفهمه أخي الكريم حتى أعيد شرحه من جديد