يجب أن يكون الأشخاص الذين لديهم خبرة في البرمجة على دراية بالوظائف العودية. غالبًا ما نستخدم الخوارزميات العودية لحل سلسلة من المشكلات المعقدة، ويمكنهم أيضًا تحسين التعليمات البرمجية لدينا. هناك بعض الأشياء التي يجب ملاحظتها عند استخدام العودية:
1) العودية هي استدعاء الوظيفة نفسها داخل الوظيفة نفسها.
2) كفاءة التكرار منخفضة نسبيًا، ولا ينصح باستخدامها إذا كان هناك حد زمني.
3) يجب أن يكون هناك شرط نهاية واضح في العملية العودية، وهو الخروج العودي.
دعونا نشرح الوظائف العودية بالتفصيل أدناه.
دعونا نلقي نظرة أولاً على الاستخدام البسيط للتكرار من خلال مثال:
m=int(input('أدخل رقم:'))deftest(x):x+=2ifx<100:test(x)else:print('آخر x هو:',x)test(m)
الإخراج هو:
أدخل رقمًا: 20 وآخر x هو: 100
دعونا نحلل هذا المثال. أولاً، في السطر الأول من الكود، نقوم بإدخال عدد صحيح في السطر الأخير، حيث يتم تمرير m كمعلمة فعلية إلى طريقة test()، وستتم إضافة x بواسطة 2 أولاً، ثم الحكم، إذا كانت قيمة x أقل من 100، فاستدعاء هذه الوظيفة مرة أخرى عند الاتصال، يتم استخدام القيمة الحالية لـ x كمعلمة فعلية للمشاركة في الاستدعاء =100 راضي.
انظر إلى الرسم البياني أدناه:
أي أنه إذا لم يتم استيفاء الشروط، فإنه يعود إلى الطبقة الخارجية ويستدعي هذه الوظيفة.
عند الحديث عن المشاكل الكلاسيكية في الخوارزميات العودية، فإن تسلسل فيبوناتشي وبرج هانوي لا ينفصلان دائمًا. سنشرح هنا كيفية استخدام التكرار لحل تسلسل فيبوناتشي.
أولا وقبل كل شيء، علينا أن نعرف أن الصيغة العودية لتسلسل فيبوناتشي هي F(n)=F(n-1)+F(n-2)، F(1)، وF(2) هي 1. يمكن استخدام العودية للعثور على قيمة عنصر في تسلسل فيبوناتشي.
هناك العديد من الطرق التي يمكننا استخدامها لحل مشاكل تسلسل فيبوناتشي.
أولاً نستخدم الطريقة العودية شائعة الاستخدام لحل هذه المشكلة:
N=int(input(أدخل عدد العناصر التي سيتم الحصول عليها :))deffibonacci(n):ifn<=2:# إذا كان أقل من أو يساوي 2، فاضبط n على 1 return1else:returnfibonacci(n-1) + طباعة فيبوناتشي (ن-2) ("القيمة المقابلة هي"، فيبوناتشي (ن))
الإخراج هو:
أدخل عدد العناصر التي تريد الحصول عليها: 4 يقابل 3
بالنسبة لطريقة الاستدعاء العودية هذه، عندما ندخل القيمة 4، سيتم تنفيذ العمليات التالية بشكل متكرر:
فيبوناتشي(3)+فيبوناتشي(2)=فيبوناتشي(2)+فيبوناتشي(1)+فيبوناتشي(2)
ومن ثم يمكننا أن نرى أن قيمة الحد الرابع هي 1+1+1=3.
في الواقع، تعد طريقة الحل هذه مضيعة للوقت، حيث إنها تتطلب الكثير من التكرارات، ويمكننا أيضًا استخدام المساحة بدلاً من الوقت لحل هذه المشكلة.
الرمز هو كما يلي:
n=int(input(أدخل عدد المصطلحات التي سيتم الحصول عليها :))fibonacci=[1,1]foriinrange(2,n):fibonacci.append(fibonacci[i-1]+fibonacci[i-2])print ('القيمة المقابلة هي'،فيبوناتشي [ن-1])
الإخراج هو:
أدخل عدد العناصر التي تريد الحصول عليها: 4 يقابل 3
بهذه الطريقة، نقوم أولاً بتحديد قيم أول عنصرين في القائمة، ومن ثم بالنسبة للعدد n من العناصر التي نريد حلها، نقوم مباشرة بملء القائمة بأرقام فيبوناتشي للعنصر الذي نحتاجه من خلال الصيغة، وأخيرًا، وفقًا للمؤشر، تجد القيمة نتيجة الإخراج المقابلة مباشرة.
هذا كل ما في الأمر بالنسبة للوظيفة العودية، كما ذكرنا سابقًا، يجب أن نولي اهتمامًا خاصًا للخروج العودي والحدود الزمنية. الخروج هو مفتاح نهاية العودية. في كثير من الحالات، سيؤدي استخدامنا للطرق العودية إلى حدوث ذلك في البرنامج تجاوز الوقت المحدد، في هذا الوقت نحتاج إلى تغيير تفكيرنا لحل المشكلة. الطريقة الثانية المذكورة أعلاه يمكن أن تساعد الجميع في حل المشكلة.