في هذا الدرس بإذن الله سأستعرض نوع مميز وخاص من أنواع الدوال
Methods , وهو ما يعرف بـ
Recursive method أي الدوال التي تنادي نفسها !! ففي بعض المشاكل يكون استخدام هذا النوع من الدوال مفيد جدا ..ومن أشهر الأمثلة التي كتبت في هذا النوع هي :
** المضروب Factorial ...
** متسلسلة فيبوناسي Fibonacci Series ....
** سأوضح الآن هذا المفهوم في مثال المضروب Factorial : --
لكي نحسب مضروب أي عدد صحيح n فإننا نتبع حاصل الضرب التالي :n · ( n - 1 ) · ( n - 2 ) · …..... · 1
لنأخذ على سبيل المثال العدد 5:
120 = 1* 2 * 3* 4* 5 = !5
وإذا استطعنا كتابة
: ( 1* 2 * 3* 4)* 5 = !5 فإن مضروب العدد 5 هو
: (! 4) * 5 = !5
وبما أن ( ! 3 ) * 4 = !4 ...... فإننا نستطيع كتابة مضروب الـ 5 كالتالي
: (( ! 3 ) * 4 ) * 5 = !5 ...
و بالتالي نستطيع أن نعمّمّ العلاقة كالتالي :
! ( n! = n · ( n - 1 مضروب العدد=العدد نفسه * مضروب العدد الذي أقل منه .
مع الوضع في الاعتبار أن مضروب أي عدد أقل من أو يساوي
1 هو
1 (1=!1) .
** لننشئ الآن دالة تقوم بإيجاد المضروب لأي عدد باستخدام مفهوم الدالة التي تنادي نفسها Recursive method :
طبعا الدالة السابقة تستقبل العدد الذي تريد إيجاد المضروب له وتخزنه في المتغير number فإذا كان هذا العدد هو 1 أو أقل فالمضروب سيكون 1 لذلك كتبنا return 1 .... أي عند تحقق هذا الشرط ستعود الدالة بالرقم واحد ...
else أما إذا كان العدد أكبر من 1 ففي كل مرة سيحسب المضروب بالطريقة التي اتفقنا عليها

نفس العدد* مضروب العدد الذي أقل منه )
لكن مضروب العدد الذي أقل منه من أين سيحسبه ؟ عن طريق مناداة الدالة مرة أخرى بالجملة المشار إليها بالأحمر في الشكل السابق , لكن في حالة مناداة الدالة في هذه المرة ستقل قيمة ال parameter بمقدار 1 ,لتصبح قيمة المتغير number-1 << number وهكذا تنادي الدالة نفسها في كل مرة حتى تصل للعدد واحد..
لو جربنا الأوامر السابقة باعتبار أن
number=3 ستكون العملية مشابهة لما يلي :
والعرض التالي يوضح العملية التي تحدث داخل الدالة باختصار باعتبار أن المتغير number يحوي العدد 5:
لنكتب الآن البرنامج كاملا بحيث ننشئ الدالة
Factorial عند السطر
6 ,ثم نستدعيها في السطر
18 "من داخل ال
Main " ونرسل لها العدد
5 ثم سنخزن النتيجة التي تعود بها الدالة
"مضروب العدد 5 "في المتغير
result الذي سنقوم بطباعته بعد ذلك :
ستكون المخرجات كالتالي: