السلام عليكــم ورحمـة الله وبركاتــه ...
الـ Recursion يعنى الإستدعاء الذاتى للدوال ، بمعنى أن الدالة تستدعى نفسها من داخل الدالة .
لذلك فإن الـ Recursion له الكثير من الفوائد ، كمثال : حساب Factorial لأى رقم و أيضاً داخل دوال الترتيب .
N! = N × (N-1) × (N-2) × ….... × 3 × 2 × 1
5! = 5 × 4 × 3 × 2 × 1 = 120
لذلك ، كتبنا هذه الدالة لحساب الـ Factorial بلغة الـ ++C :
- long factorial (long a)
- {
- if (a > 1) {
- return ( a * factorial (a-1) ); }
- else {
- return ( 1 ); }
- }
مثال على إستخدام الدالة :
- #include <iostream>
- using namespace std;
- int main ()
- {
- long number;
- cout << "Please type a number: ";
- cin >> number;
- cout << number << "! = " << factorial (number);
- return 0;
- }
نتيجة البرنامج :
لو تلاحظ ، فى دالة factorial ، قمنا بكتابة إستدعاء ذاتى للدالة ، اى الدالة قامت بمناداة نفسها من داخلها .
لو كان لا يوجد شرط داخل الدالة ( و هو هنا ان يكون الرقم أكبر من 1) ، ستقوم الدالة بإستدعاء نفسها مرات لا نهائية متتالية حتى نوقف البرنامج بالقوة مما قد يؤدى إلى أخطاء غير محدودة .
لو تلاحظ أيضاً ، أن الدالة محددة بنوع بيانات واحد و هو long و ذلك للبساطة فى البرنامج ، لذلك النتائج لن تتعدى 10! أو 15! على حسب النظام الذى تترجم البرنامج عليه .
أنتهى الدرس ،،
الدرس على ملف PDF : فى المرفقات
المرجع : Functions (II) - Recursivity
تعديل بناء على رغبة أخى بن العيد :)




