الخوارزمياتتعريف دوال تستدعي نفسها - التمرين الثاني
المطلوب
أكتب دالة تستدعي نفسها إسمها CountRecursively
تعطيها عدد صحيح أكبر من 0 فتقوم بطباعة جميع الأعداد الصحيحة الموجودة من هذا العدد وصولاً إلى 1 بشكل تنازلي.
في البرنامج, قم باستدعاء الدالة CountRecursively()
لتجربتها.
النتيجة المطلوبة
إذا قمنا باستدعاء الدالة countRecursively()
و أعطيناها القيمة 3
ستطبع لنا جميع الأعداد من 3
إلى 1
كالتالي.
الخوارزمية
شرح طريقة عمل الخوارزمية بدقة
كود الجافا
public class Recursion { /* ------------------------------- هنا قمنا بتعريف الدالة ------------------------------ */ public static int CountRecursively ( int counter ) { if ( counter != 0 ) { System.out.print("counter = " +counter+ "\n"); return CountRecursively( counter - 1 ); } return 0; } /* --------------------------- من هنا يبدأ البرنامج بالتنفيذ --------------------------- */ public static void main (String[] args) { CountRecursively(3); } }
شرح الكود
public static int CountRecursively ( int counter ) { if ( counter != 0 ) { System.out.print("counter = " +counter+ "\n"); return CountRecursively( counter - 1 ); } return 0; }
- هنا أنشأنا الدالة
countRecursively()
و حددنا أن نوعهاint
و وضعنا لها الباراميترcounter
و نوعهint
أيضاً. - إذاً, عند إستدعاء هذه الدالة يجب أن نمرر لها أي عدد من النوع
int
. - المتغير
counter
سيمثل العداد الذي يحدد كم مرة ستقوم الدالة باستدعاء نفسها حيث أنه سيتم إنقاص 1 من قيمته كلما استدعت الدالة نفسها. - الشرط الموضوع فيها يعني أنه إذا لم تكن قيمة المتغير
counter
تساوي 0 سيتم عرض قيمة المتغيرcounter
, ثم إستدعاء الدالة من جديد مع إنقاص 1 من قيمة المتغيرcounter
. - إذاً هذه الدالة تستمر في إستدعاء نفسها طالما أن قيمة المتغير
counter
لا تساوي 0 بعد. - في الأخير و بعد أن تتوقف الدالة عن إستدعاء نفسها, سيتم إرجاع القيمة 0 إلى الدالة
main()
حيث تم إستدعاءها من الأساس. - ملاحظة: لو لم نضع الأمر
return 0;
في نهاية الدالة, كان سيظهر لك خطأ في البرنامج و السبب أن نوع الدالة في الأساسint
. إذاً يجب أن ترجع أي قيمة نوعهاint
إلى المكان الذي تم استدعاءها منه حتى لا يحدث خطأ.
public static void main (String[] args) { CountRecursively(3); }
- هنا قمنا باستدعاء الدالة
CountRecursively()
و مررنا لها القيمة 3. - إذاً أول قيمة للعداد
counter
ستكون 3, و آخر قيمة له ستكون 0.