موصى به, 2024

اختيار المحرر

الفرق بين Recursion و Iteration

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

رسم بياني للمقارنة

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

تعريف Recursion

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

لإنهاء العودية ، يجب عليك تضمين عبارة محددة في تعريف الدالة لإجبار الدالة على العودة دون إعطاء استدعاء تكراري لنفسها. سيؤدي غياب العبارة المختارة في تعريف الدالة العودية إلى السماح للوظيفة بالتكرار غير المحدود مرة واحدة.

دعونا نفهم العودية مع وظيفة والتي ستعود إلى عامل العدد.

 int factorial (int num) {int answer؛ if (num == 1) {return 1؛ } else {answer = factorial (num-1) * num؛ // call recursive call} عودة (إجابة) ؛ } 

في التعليمات البرمجية أعلاه ، يُظهر الجزء في الجزء الآخر التكرار ، حيث يستدعي البيان الدالة factorial () التي توجد بها.

تعريف التكرار

التكرار هو عملية تنفيذ مجموعة التعليمات بشكل متكرر حتى يصبح الشرط في عبارة التكرار غير صحيح. يتضمن بيان التكرار التهيئة والمقارنة وتنفيذ العبارات داخل بيان التكرار وأخيرًا تحديث متغير التحكم. بعد تحديث متغير التحكم ، تتم المقارنة مرة أخرى ، وتتكرر العملية نفسها ، حتى يتضح أن الحالة في عبارة التكرار خاطئة. تكون عبارات التكرار هي حلقة "for" loop ، و "while" ، و "do-while".

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

دعونا نفهم التكرار بشأن المثال أعلاه.

 int factorial (int num) {int answer = 1؛ // يحتاج إلى التهيئة لأنه قد يحتوي على قيمة للقمامة قبل تهيئتها (int t = 1؛ t> num؛ t ++) // iteration {answer = answer * (t)؛ عودة (إجابة) ؛ }} 

في التعليمة البرمجية المذكورة أعلاه ، تقوم الدالة بارجاع معامل الأحداث للرقم باستخدام عبارة تكرار.

الاختلافات الأساسية بين Recursion و Iteration

  1. التكرار هو عندما تقوم إحدى الطرائق في أحد البرامج باستدعاء نفسه بشكل متكرر بينما يحدث التكرار عندما يتم تنفيذ مجموعة من الإرشادات في أحد البرامج بشكل متكرر.
  2. تحتوي الطريقة المتكررة على مجموعة من التعليمات ، والبيان الذي يطلق على نفسه ، وشرط الإنهاء ، بينما تحتوي عبارات التكرار على التهيئة ، والزيادة ، والحالة ، ومجموعة من التعليمات داخل حلقة ومتغير تحكم.
  3. يقرر بيان الشرطي إنهاء قيمة متغير التكرار والتحكم في إنهاء بيان التكرار.
  4. إذا لم تؤدِ هذه الطريقة إلى شرط الإنهاء فإنها تدخل في العودية غير المحدودة. من ناحية أخرى ، إذا كان متغير التحكم لا يؤدي أبداً إلى قيمة الإنهاء ، فإن عبارة التكرار تتكرر بشكل لا نهائي.
  5. يمكن أن يؤدي العودية اللانهائية إلى تعطل النظام بينما يستهلك التكرار غير المحدود دورات CPU.
  6. يتم تطبيق التكرار دائمًا على الطريقة بينما يتم تطبيق التكرار على مجموعة من التعليمات.
  7. يتم تخزين المتغيرات التي تم إنشاؤها أثناء العودية على مكدس بينما لا يتطلب التكرار مكدس.
  8. يتسبب Recursion في مقدار الحمل من استدعاء الدالة المتكررة بينما لا يحتوي التكرار دالة استدعاء الحمل.
  9. نظرًا لوجود دالة استدعاء تنفيذ العودية بشكل أبطأ في حين أن تنفيذ التكرار أسرع.
  10. يقلل التكرار من حجم التعليمات البرمجية في حين ، التكرارات تجعل رمز أطول.

استنتاج:

من السهل الكتابة في الدالة العودية ، ولكنها لا تؤدي أداءً جيدًا مقارنة بالتكرار ، بينما يصعب الكتابة عن التكرار ، لكن أدائها جيد مقارنة بالتكرار.

Top