مفهوم دالة بايثون التكرارية: دروس بايثون للمبتدئين

نشرت: 2020-03-18

في عالم علوم الكمبيوتر ، تشير العودية إلى تقنية تعريف الشيء بمصطلحاته الخاصة. بمعنى آخر ، تستدعي الدالة العودية نفسها للمعالجة. في هذه المقالة ، سوف نفهم مفهوم الوظيفة العودية في Python ، وهي لغة برمجة مستخدمة على نطاق واسع في القرن الحادي والعشرين.

جدول المحتويات

ما هي لغة Python Recursion ؟

في Python ، تسمى مجموعة العبارات ذات الصلة التي تؤدي مهمة معينة بأنها "وظيفة". لذلك ، تقسم الوظائف برنامجك إلى أجزاء أصغر. ومن المعروف أن الوظيفة يمكنها استدعاء وظائف أخرى في بايثون.

لكن بعض الوظائف الأخرى يمكن أن تطلق على نفسها. تُعرف هذه باسم الوظائف العودية. ضع في اعتبارك مرآتين متوازيتين موضوعتين في مواجهة بعضهما البعض. الآن ، أي شيء يتم الاحتفاظ به بين المرايا سينعكس بشكل متكرر.

دعونا ندخل في التفاصيل حول الدالة العودية لفهم عملها بوضوح.

الوظيفة العودية

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

اقرأ أيضًا: أسئلة وأجوبة مقابلة Python

افترض أنك تريد معرفة عاملي عدد صحيح. العامل الضريبي ليس سوى حاصل ضرب كل الأعداد ، بدءًا من 1 إلى هذا العدد الصحيح. على سبيل المثال ، مضروب 5 (مكتوبًا كـ 5!) سيكون 1 * 2 * 3 * 4 * 5 * 6 ، أي 720. لدينا دالة تكرارية calc_factorial (x) ، والتي يتم تعريفها على النحو التالي:

def calc_factorial (x):

#Recursive function لإيجاد مضروب عدد صحيح

إذا كانت x == 1:

العودة 1

آخر

العودة (x * calc_factorial (x-1))

ماذا سيحدث إذا سميت هذه الدالة بعدد صحيح موجب مثل 4؟ حسنًا ، سيضيف كل استدعاء دالة إطارًا مكدسًا حتى نصل إلى الحالة الأساسية (عندما يتقلص الرقم إلى 1). الشرط الأساسي مطلوب حتى تنتهي العودية ولا تستمر إلى ما لا نهاية. لذلك ، في الحالة المحددة ، سيتم إرجاع القيمة 24 بعد الاستدعاء الرابع.

تنفيذ وظيفة R ecursive في بايثون

يمكن أن يكون هناك تطبيقات متنوعة للوظائف العودية في بايثون. على سبيل المثال ، تريد عمل رسم بنمط متكرر ، على سبيل المثال ، ندفة ثلجية من Koch. يمكن استخدام العودية لتوليد أنماط كسورية ، والتي تتكون من إصدارات أصغر من نفس التصميم.

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

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

قراءة: راتب مطور Python في الهند

المحافظة على الدولة

كل استدعاء متكرر في Python له سياق التنفيذ الخاص به. أثناء التعامل مع الوظائف العودية في Python ، يجب عليك ربط الحالة من خلال كل مكالمة متكررة. مع هذا ، تصبح الحالة الحالية جزءًا من سياق تنفيذ المكالمة الحالية. يمكنك أيضًا إبقاء الدولة في النطاق العالمي.

على سبيل المثال ، إذا كنت تستخدم العودية لحساب 1 + 2 + 3 + 4 + ……. + 10. هنا ، يشكل الرقم الحالي الذي تضيفه والمبلغ المتراكم لهذه النقطة الحالة التي تحتاج إلى الحفاظ عليها. تتضمن المحافظة على الحالة تمرير الحالة الحالية المحدثة كوسيطات من خلال كل استدعاء. إليك كيف يمكنك القيام بذلك.

def sum_numbers (current_number، stackated_sum)

# القضية الأساسية

#Return الحالة النهائية

إذا كان الرقم الحالي == 11:

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

# حالة متسلسلة

#Thread الدولة من خلال المكالمة العودية

آخر:

إرجاع sum_numbers (current_number + 1، stack_sum + current_number)

بدلاً من ذلك ، يمكنك استخدام الحالة المتغيرة العالمية. للحفاظ على الحالة باستخدام هذه الطريقة ، فإنك تُبقي الحالة في النطاق العالمي.

Current_number = 1

التراكم_المجموع = 0

def sum_numbers ():

Current_number العالمية

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

# القضية الأساسية

إذا Current_number == 11

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

# حالة متسلسلة

آخر:

التراكم_المجموع = المجموع_المتراكم + العدد الحالي

Current_number = current_number + 1

إرجاع sum_numbers ()

هياكل البيانات التكرارية

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

من المهم أن نلاحظ هنا أن بنية الوظائف العودية غالبًا ما يتم تصميمها على غرار هياكل البيانات التي تأخذها كمدخلات. لذلك ، فإن هياكل البيانات العودية والوظائف العودية تسير جنبًا إلى جنب.

العودية في حساب فيبوناتشي

حدد عالم الرياضيات الإيطالي فيبوناتشي لأول مرة أرقام فيبوناتشي في القرن الثالث عشر لنمذجة النمو السكاني للأرانب. استنتج أنه بدءًا من زوج واحد من الأرانب في السنة الأولى ، فإن عدد أزواج الأرانب المولودة في سنة معينة يساوي عدد أزواج الأرانب التي ولدت في كل عام من العامين الماضيين. يمكن كتابة هذا على النحو التالي: Fn = Fn-1 + Fn-2 (الحالات الأساسية: F0 = 1 و F1 = 1).

عندما تكتب دالة تكرارية لحساب رقم فيبوناتشي ، يمكن أن ينتج عنها عودية ساذجة. يحدث هذا عندما يتم اتباع تعريف الدالة العودية بسذاجة ، وينتهي بك الأمر بإعادة حساب القيم دون داع. لتجنب إعادة الحساب ، يمكنك تطبيق ديكور lru_cache على الوظيفة. يخزن النتائج ويحفظ العملية من أن تصبح غير فعالة.

اقرأ المزيد: أفضل 10 أدوات للبايثون يجب على كل مطور لغة بايثون معرفتها

إيجابيات وسلبيات التكرار

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

تغليف

في هذه المقالة ، قمنا بتغطية مفهوم عودية Python ، وشرحناها باستخدام بعض الأمثلة ، وناقشنا أيضًا بعض مزاياها وعيوبها. مع كل هذه المعلومات ، يمكنك بسهولة شرح الوظائف العودية في مقابلة بايثون التالية!

إذا كنت مهتمًا بالتعرف على علوم البيانات ، فراجع دبلوم PG في IIIT-B & upGrad في علوم البيانات والذي تم إنشاؤه للمهنيين العاملين ويقدم أكثر من 10 دراسات حالة ومشاريع ، وورش عمل عملية عملية ، وإرشاد مع خبراء الصناعة ، 1- على - 1 مع موجهين في الصناعة ، وأكثر من 400 ساعة من التعلم والمساعدة في العمل مع الشركات الكبرى.

لماذا العودية مهمة جدا؟

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

ستلاحظ غالبًا أن بعض البرامج تستهلك قدرًا كبيرًا من المساحة وأسطر التعليمات البرمجية للعمل. هناك العديد من السيناريوهات حيث يمكن تبسيط هذه البرامج عن طريق إضافة دالة تكرارية بحيث يتم استدعاء الوظيفة مرارًا وتكرارًا كلما لزم الأمر. لذلك ، لن تضطر إلى كتابة الكثير من سطور التعليمات البرمجية الإضافية ، ويتم العمل أيضًا بشكل فعال.

ما هي تطبيقات العودية؟

هناك الكثير من التطبيقات العملية للتكرار في كل من وظائف الحوسبة والحياة الواقعية. بدون استخدام العودية ، لا يمكن التعبير عن وظائف رياضية معينة مثل متتالية فيبوناتشي ، وظيفة أكرمان ، لتحديد ما إذا كان الرقم متماثلًا أم لا ، ورسم نوعًا من الفركتلات ، وأكثر من ذلك بكثير.

هناك العديد من البرامج والتطبيقات التي تم إنشاؤها من خلال وظائف الرياضيات هذه. على سبيل المثال ، يستخدم Candy Crush وظائف الرياضيات هذه والتكرار لتوليد مجموعة من المربعات. بخلاف ذلك ، يعد الشطرنج أيضًا مثالًا كلاسيكيًا على تطبيق العودية. غالبية خوارزميات البحث التي نستخدمها اليوم تستخدم أيضًا العودية.

ما هي القواعد الأساسية للتكرار؟

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