القائمة الرئيسية

الصفحات

دورة البرمجة بلغة بايثون - الدرس السابع عشر (الاستدعاء الذاتي Recursion في لغة بايثون)

دورة البرمجة بلغة بايثون - الدرس السابع عشر (الاستدعاء الذاتي Recursion في لغة بايثون)

دورة البرمجة بلغة بايثون - الدرس السابع عشر (الاستدعاء الذاتي Recursion في لغة بايثون)
في هذا البرنامج التعليمي ، ستتعلم كيفية إنشاء دالة تكرارية (دالة تستدعي نفسها).

ما هو الاستدعاء الذاتي؟
هو عملية تعريف شيء من حيث ذاته.

مثال في العالم المادي هو وضع مرآتين متوازيتين في مواجهة بعضهما البعض. أي كائن بينهما سوف ينعكس بشكل متكرر.

دالات بايثون التكرارية
في بايثون ، نعلم أن الدالة يمكنها استدعاء دوال أخرى. بل من الممكن أن تقوم الدالة باستدعاء نفسها. تسمى هذه الأنواع من الإنشاءات بالدوال التكرارية.

تُظهر الصورة التالية عمل دالة تكرارية اسمها recurse.

دالة بايثون التكرارية


فيما يلي مثال على دالة تكرارية للعثور على عاملي عدد صحيح.

مضروب الرقم هو حاصل ضرب جميع الأعداد الصحيحة من 1 إلى هذا الرقم. على سبيل المثال ، معامل 6 (يُشار إليه بالرمز 6!) هو 1 * 2 * 3 * 4 * 5 * 6 = 720.

مثال على دالة تكرارية
def factorial(x):
    """This is a recursive function
    to find the factorial of an integer"""

    if x == 1:
        return 1
    else:
        return (x * factorial(x-1))


num = 3
print("The factorial of", num, "is", factorial(num))

الناتج

The factorial of 3 is 6

في المثال أعلاه ، العامل ()factorial هو دالة تكرارية تستدعي نفسها.

عندما نطلق على هذه الدالة عددًا صحيحًا موجبًا ، فإنها ستستدعي نفسها بشكل متكرر عن طريق تقليل الرقم.

كل دالة تضرب الرقم بمضروب الرقم الموجود أسفله حتى يساوي واحدًا. يمكن شرح هذه الدالة التكرارية في الخطوات التالية.

factorial(3)          # 1st call with 3
3 * factorial(2)      # 2nd call with 2
3 * 2 * factorial(1)  # 3rd call with 1
3 * 2 * 1             # return from 3rd call as number=1
3 * 2                 # return from 2nd call
6                     # return from 1st call
لنلقِ نظرة على صورة عملية خطوة بخطوة لما يجري:

عمل دالة تكرارية


ينتهي التكرار عندما ينخفض ​​الرقم إلى 1. وهذا ما يسمى الشرط الأساسي.

يجب أن تحتوي كل دالة تكرارية على شرط أساسي يوقف التكرار أو تستدعي الدالة نفسها بلا حدود.

يحد مترجم بايثون من أعماق التكرار للمساعدة في تجنب التكرار اللانهائي ، مما يؤدي إلى فيضان المكدس.

بشكل افتراضي ، الحد الأقصى لعمق التكرار هو 1000. إذا تم تجاوز الحد ، فإنه ينتج عنه RecursionError. دعونا نلقي نظرة على حالة واحدة من هذا القبيل.

def recursor():
    recursor()
recursor()
الناتج

Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "<string>", line 2, in a
  File "<string>", line 2, in a
  File "<string>", line 2, in a
  [Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded

مزايا التكرار
  • تجعل الدوال التكرارية الشفرة تبدو نظيفة وأنيقة.
  • يمكن تقسيم مهمة معقدة إلى مشاكل فرعية أبسط باستخدام التكرار.
  • إنشاء التسلسل أسهل مع التكرار من استخدام بعض التكرارات المتداخلة.


مساوئ التكرار
  • في بعض الأحيان يصعب متابعة المنطق الكامن وراء التكرار.
  • الاستدعائات المتكررة باهظة الثمن (غير فعالة) لأنها تستهلك الكثير من الذاكرة والوقت.
  • يصعب تصحيح الدوال التكرارية.



reaction:

تعليقات