تدريب عملي
التدريب العملي 4: الاستدعاء الذاتي Recursion
طباعة 1 إلى 5 مرتين: بحلقة for، ثم بدالة تستدعي نفسها.
من الدرس 1. الدوال المعرّفة من قبل المستخدم · كل التدريبات
١نص المسألة
اطبع الأعداد من 1 إلى 5 بطريقتين: بحلقة for، ثم بدالة myprint تستدعي نفسها (الاستدعاء الذاتي recursion) دون استخدام أي حلقة.
٢الخوارزمية المقترحة
- في main اطبع عنوان «بالطريقة التقليدية» ثم حلقة for من 1 إلى 5.
- اطبع عنوان «بطريقة استدعاء الدالة لنفسها» ثم استدعِ myprint(1).
- عرّف static void myprint(int i): إذا كان i <= 5 (شرط التوقف) اطبع i، ثم زد i بواحد، ثم استدعِ myprint(i).
- بعد الاستدعاء اطبع «انتهى البرنامج».
٣خطوات التطبيق
في NetBeans
- أنشئ مشروعًا جديدًا: File ← New Project ← Java with Ant ← Java Application.
- اكتب اسم المشروع، وفعّل Create Main Class.
- اكتب الكود ثم نفّذ بـ Run (F6).
في OneCompiler
- افتح OneCompiler من زر «▶ شغّل المشروع» أسفل الحل، أو من موقع onecompiler.com/java.
- في OneCompiler تُكتب كل الكلاسات في ملف واحد Main.java؛ زر التشغيل يجمعها لك تلقائيًّا.
- إذا كان البرنامج يقرأ من لوحة المفاتيح، فاكتب المدخلات في خانة STDIN التي تظهر تحت الكود في محرّر OneCompiler، ثم اضغط Run.
٤المخرجات المطلوبة
نفّذ برنامجك، ويجب أن تظهر المخرجات التالية:
run:
بالطريقة التقليدية
1
2
3
4
5
بطريقة استدعاء الدالة لنفسها
1
2
3
4
5
انتهى البرنامج
BUILD SUCCESSFUL (total time: 0 seconds)
٥الحل المقترح
حاول بنفسك أولًا، ثم قارن حلّك بالحل المقترح (كود التدريب من مذكرة العملي):
👁 اعرض الحل المقترح
package javaapplication4; public class JavaApplication4 { public static void main(String[] args) { System.out.println("بالطريقة التقليدية"); for (int i = 1; i <= 5; i++) { System.out.println(i); } System.out.println("بطريقة استدعاء الدالة لنفسها"); myprint( 1 ); System.out.println("انتهى البرنامج"); } static void myprint(int i){ if(i<=5 ){ System.out.println(i); i++; myprint(i); } }}
run:
بالطريقة التقليدية
1
2
3
4
5
بطريقة استدعاء الدالة لنفسها
1
2
3
4
5
انتهى البرنامج
BUILD SUCCESSFUL (total time: 0 seconds)
أسئلة المناقشة
أسئلة مناقشة على التدريب 4. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».
1السؤال الأول: اختر الإجابة الصحيحة
1) ماذا نعني بالاستدعاء الذاتي (recursion) في Java؟
2) أي العبارات التالية صحيحة عن هذا البرنامج؟
3) ما الشرط الأساسي لنجاح recursion ومنع حدوث حلقة لا نهائية؟
4) ماذا يحدث إذا لم نضع شرط إيقاف في دالة recursive؟
5) ما الفرق بين recursion والحلقات (loops)؟
6) ما وظيفة الدالة myprint في البرنامج؟
7) ماذا يحدث إذا حذفنا الشرط if(i<=5) من الدالة myprint؟
8) عند استدعاء myprint(1)، ما أول رقم يتم طباعته؟
9) عند استدعاء myprint(1)، ما آخر رقم يتم طباعته قبل انتهاء الاستدعاءات؟
أجب عن الأسئلة ثم اضغط «صحّح ورقتي».