العودية جافا
العودية جافا
العودية هي تقنية إجراء استدعاء دالة في حد ذاته. توفر هذه التقنية طريقة لتقسيم المشكلات المعقدة إلى مشاكل بسيطة يسهل حلها.
قد يكون من الصعب بعض الشيء فهم التكرار. أفضل طريقة لمعرفة كيفية عملها هي تجربتها.
مثال العودية
من السهل جمع عددين معًا ، لكن إضافة نطاق من الأرقام أكثر تعقيدًا. في المثال التالي ، يتم استخدام العودية لإضافة نطاق من الأرقام معًا عن طريق تقسيمها إلى مهمة بسيطة تتمثل في إضافة رقمين:
مثال
استخدم العودية لجمع كل الأعداد حتى 10.
public class Main { public static void main(String[] args) { int result = sum(10); System.out.println(result);
}public static int sum(int k) { if (k > 0) { return k + sum(k - 1); } else { return 0;
}}
}
شرح المثال
عندما sum()
يتم استدعاء الوظيفة ، فإنها تضيف معلمة k
إلى مجموع جميع الأرقام الأصغر من k
وتعيد النتيجة. عندما تصبح k 0 ، تقوم الوظيفة بإرجاع 0. عند التشغيل ، يتبع البرنامج الخطوات التالية:
10 + (9 + مجموع (8))
10 + (9 + (8 + مجموع (7)))
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + مجموع (0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0
نظرًا لأن الوظيفة لا تستدعي نفسها عندما k
تكون 0 ، يتوقف البرنامج عند هذا الحد ويعيد النتيجة.
حالة التوقف
مثلما يمكن أن تصطدم الحلقات بمشكلة التكرار اللانهائي ، يمكن أن تواجه الوظائف العودية مشكلة العودية اللانهائية. العودية اللانهائية هي عندما لا تتوقف الوظيفة أبدًا عن استدعاء نفسها. يجب أن يكون لكل دالة تكرارية حالة توقف ، وهي الحالة التي تتوقف فيها الوظيفة عن استدعاء نفسها. في المثال السابق ، تكون حالة التوقف عندما k
تصبح المعلمة 0.
من المفيد رؤية مجموعة متنوعة من الأمثلة المختلفة لفهم المفهوم بشكل أفضل. في هذا المثال ، تضيف الدالة نطاقًا من الأرقام بين البداية والنهاية. حالة التوقف لهذه الدالة العودية عندما لا تكون النهاية أكبر من البداية :
مثال
استخدم العودية لجمع كل الأرقام بين 5 إلى 10.
public class Main { public static void main(String[] args) { int result = sum(5, 10); System.out.println(result);
}public static int sum(int start, int end) { if (end > start) { return end + sum(start, end - 1); } else { return end; } } }