الفرق الرئيسي - العودية مقابل التكرار
يمكن استخدام العودية والتكرار لحل مشاكل البرمجة. يعتمد نهج حل المشكلة باستخدام العودية أو التكرار على طريقة حل المشكلة. الفرق الرئيسي بين العودية والتكرار هو أن العودية هي آلية لاستدعاء وظيفة داخل نفس الوظيفة بينما التكرار هو تنفيذ مجموعة من التعليمات بشكل متكرر حتى يكون الشرط المحدد صحيحًا. التكرار والتكرار هما تقنيتان رئيسيتان لتطوير الخوارزميات وبناء تطبيقات البرمجيات.
ما هو العودية؟
عندما تستدعي الدالة نفسها داخل الوظيفة ، تُعرف باسم Recursion. هناك نوعان من العودية. إنها عودية محدودة وعودية لا نهائية. العودية المحدودة لها شرط إنهاء. العودية اللانهائية ليس لها شرط إنهاء.
يمكن شرح العودية باستخدام البرنامج لحساب العوامل.
ن!=n(n-1)! ، إذا كان n>0
ن!=1 ، إذا كان n=0 ؛
راجع الكود أدناه لحساب مضروب 3 (3!=321).
intmain () {
قيمة int=عاملي (3) ؛
printf ("العامل هو٪ d / n" ، القيمة) ؛
return 0 ؛
}
intfactorial (intn) {
إذا (ن==0) {
العودة 1 ؛
}
آخر {
return nعاملي (n-1) ؛
}
}
عند استدعاء عامل (3) ، ستستدعي هذه الوظيفة العامل (2). عند استدعاء العامل (2) ، فإن هذه الوظيفة سوف تستدعي العامل (1). ثم مضروب (1) سوف يستدعي عاملي (0). العامل (0) سيعيد 1. في البرنامج أعلاه ، n==0 شرط في "if block" هو الشرط الأساسي.وفقًا للمثل ، يتم استدعاء وظيفة العوامل مرارًا وتكرارًا.
ترتبط الوظائف العودية بالمكدس. في لغة C ، يمكن أن يكون للبرنامج الرئيسي العديد من الوظائف. لذا ، main () هي وظيفة الاستدعاء ، والوظيفة التي يطلق عليها البرنامج الرئيسي هي الوظيفة المسماة. عندما يتم استدعاء الوظيفة ، يتم منح التحكم للوظيفة التي تم استدعاؤها. بعد اكتمال تنفيذ الوظيفة ، يتم إرجاع عنصر التحكم إلى main. ثم يستمر البرنامج الرئيسي. لذلك ، يقوم بإنشاء سجل تنشيط أو إطار مكدس لمتابعة التنفيذ.
الشكل 01: العودية
في البرنامج أعلاه ، عند استدعاء عامل (3) من main ، فإنه ينشئ سجل تنشيط في مكدس المكالمات. بعد ذلك ، يتم إنشاء إطار مكدس عاملي (2) أعلى المكدس وما إلى ذلك. يحتفظ سجل التنشيط بالمعلومات حول المتغيرات المحلية وما إلى ذلك. في كل مرة يتم استدعاء الوظيفة ، يتم إنشاء مجموعة جديدة من المتغيرات المحلية في أعلى المكدس. يمكن لهذه الإطارات المكدسة إبطاء السرعة. وبالمثل في العودية ، تستدعي الوظيفة نفسها. تم العثور على تعقيد الوقت لوظيفة عودية من خلال عدد المرات ، يتم استدعاء الوظيفة. التعقيد الزمني لاستدعاء وظيفة واحدة هو O (1). بالنسبة لعدد n من المكالمات العودية ، يكون تعقيد الوقت هو O (n).
ما هو التكرار؟
التكرار عبارة عن كتلة من التعليمات تتكرر مرارًا وتكرارًا حتى يتحقق الشرط المحدد. يمكن تحقيق التكرار باستخدام "for loop" أو "do-while loop" أو "while loop". صيغة "for loop" كالتالي.
لـ (تهيئة ؛ شرط ؛ تعديل) {
// البيانات ؛
}
الشكل 02: "مخطط تدفق الحلقة"
يتم تنفيذ خطوة التهيئة أولاً. هذه الخطوة هي إعلان وتهيئة متغيرات التحكم في الحلقة. إذا كان الشرط صحيحًا ، فسيتم تنفيذ العبارات الموجودة داخل الأقواس المتعرجة. يتم تنفيذ هذه العبارات حتى الشرط صحيح. إذا كان الشرط خاطئًا ، ينتقل عنصر التحكم إلى العبارة التالية بعد "حلقة for". بعد تنفيذ العبارات داخل الحلقة ، ينتقل عنصر التحكم إلى قسم التعديل. هو تحديث متغير التحكم في الحلقة. ثم يتم فحص الحالة مرة أخرى.إذا كان الشرط صحيحًا ، فسيتم تنفيذ العبارات الموجودة داخل الأقواس المتعرجة. بهذه الطريقة يتم تكرار "for loop".
في "while loop" ، يتم تنفيذ العبارات الموجودة داخل الحلقة حتى يصبح الشرط صحيحًا.
بينما (الحالة) {
// البيانات
}
في حلقة "do-while" ، يتم فحص الشرط في نهاية الحلقة. لذلك ، الحلقة يتم تنفيذها مرة واحدة على الأقل.
تفعل {
// البيانات
} بينما (الحالة)
برنامج للعثور على مضروب 3 (3!) باستخدام التكرار ("حلقة من أجل") كما يلي.
int main () {
intn=3 ، عاملي=1 ؛
inti ؛
لـ (i=1 ؛ i<=n ؛ i ++) {
عاملي=مضروبi ؛
}
printf ("العامل هو٪ d / n" ، عاملي) ؛
return 0 ؛
}
ما هي أوجه التشابه بين العودية والتكرار؟
- كلاهما تقنيات لحل مشكلة
- يمكن حل المهمة إما في العودية أو التكرار.
ما هو الفرق بين العودية والتكرار؟
العودية مقابل التكرار |
|
العودية هي طريقة لاستدعاء دالة ضمن نفس الوظيفة. | التكرار عبارة عن كتلة من التعليمات تتكرر حتى يتحقق الشرط المحدد. |
تعقيد الفضاء | |
تعقيد مساحة البرامج العودية أعلى من التكرارات. | تعقيد الفضاء أقل في التكرارات. |
سرعة | |
تنفيذ العودية بطيء. | في العادة ، يكون التكرار أسرع من التكرار. |
الحالة | |
إذا لم يكن هناك شرط إنهاء ، يمكن أن يكون هناك عودية لا نهائية. | إذا لم يصبح الشرط خاطئًا ، فسيكون تكرارًا لا نهائيًا. |
مكدس | |
في العودية ، يتم استخدام المكدس لتخزين المتغيرات المحلية عندما يتم استدعاء الوظيفة. | في التكرار ، لا يتم استخدام المكدس. |
قراءة الكود | |
البرنامج العودي أكثر قابلية للقراءة. | البرنامج التكراري أصعب في القراءة من البرنامج التكراري |
ملخص - العودية مقابل التكرار
ناقش هذا المقال الفرق بين العودية والتكرار.يمكن استخدام كلاهما لحل مشاكل البرمجة. الفرق بين العودية والتكرار هو أن العودية هي آلية لاستدعاء وظيفة داخل نفس الوظيفة وتكرارها لتنفيذ مجموعة من التعليمات بشكل متكرر حتى يكون الشرط المحدد صحيحًا. إذا كان من الممكن حل مشكلة في شكل تكراري ، فيمكن أيضًا حلها باستخدام التكرارات.
تنزيل نسخة PDF من Recursion vs Iteration
يمكنك تنزيل نسخة PDF من هذه المقالة واستخدامها للأغراض غير المتصلة بالإنترنت وفقًا لملاحظة الاقتباس. يرجى تنزيل نسخة PDF هنا الفرق بين العودية والتكرار