الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Recursive في البايثون

بدأه عامر الشابي في 10 نوفمبر 2014 · 2 رد · 891 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته


 


الإستدعاء الذاتي أو Recursion هو إستدعاء الدالة نفسها من داخلها أي من داخل الدالة إستخدم هذا النوع من طرق في لغات البرمجة المسمات Functional languages


 


بحيث هذه الأخيرة لا تحتوي على ما يسمى الآن في اللغات الحديثة Structured programming أي الحلقات (Loops,while)


 


على العموم الإستدعاء الذاتي له مزايا وعيوب لن أتعمق كثيراا في شرحها كلها ولكن سأذكر المهم منها


 


فمن عيوب الإستدعاء الذاتي هو فيض المكدس Stack over flow لماذا يحدث هذا الأخير؟


 


سبب واضح الإستدعاء ذاتي ينتهج منهجية في عمله فهو مزيح من loop و while فهو يقوم بالتكرار ويتوقف عندما يتحقق الشرط conditione هذه هي طريقة عمل


 


الإستدعاء الذاتي لاحظ المثال التالي لحساب مضروب العدد 5


 


أولا سنستخدم الطريقة الحديثة Structured programming


 


PC48CR.png


 


وبإستخدام الإستدعاء الذاتي


 


dHZw61.png


 


لاحظ جيدا ماذا يحدث داخل الذاكرة عن إستخدام الإستدعاء الذاتي


 


vJCwle.png


 


Drn1gS.png


 


لو لم يوجد الشرط سوف تستمر الدالة الى ما لا نهاية الى ان يحدث buffer over flow


 


فLoop أفضل غالبا من الإستدعاء الذاتي وليس دائما فالإستدعاء الذاتي يقلل من المتغيرات ويقلل من طول الكود البرمجي


 


أرجوا أن أكون قد وفقت في الشرح

تم تعديل هذه المشاركة بواسطة عامر الشابي في 10 نوفمبر 2014 في 22:00

1

Untitled-18.jpg

#2
اقتباس

 

فLoop أفضل غالبا من الإستدعاء الذاتي وليس دائما فالإستدعاء الذاتي يقلل من المتغيرات ويقلل من طول الكود البرمجي

 

ليس هناك مجال لمقارنة الإستدعاء الذاتي بالحلقات التكرارية

 

هناك مشاكل مشاكل برمجية لا يمكن حلها بإستعمال الحلقات بل يستلزم إستعمال الإستدعاء الذاتي

 

مثلا في الأشجار(من هياكل البيانات) لا يمكن طباعة عناصرها إلا بالإستدعاء الذاتي

s=[1,[2,[3,4[5,6,7]]]]

تم تعديل هذه المشاركة بواسطة kenham في 15 نوفمبر 2014 في 21:20

2▲ 1
#3

أجل

Untitled-18.jpg

مواضيع مشابهة