منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

البرمجة بلغة السى – الجزء الثالث – 4- استدعاء الدالة لنفسها :

اذهب الى الأسفل

البرمجة بلغة السى – الجزء الثالث – 4- استدعاء الدالة لنفسها : Empty البرمجة بلغة السى – الجزء الثالث – 4- استدعاء الدالة لنفسها :

مُساهمة من طرف Admin السبت فبراير 01, 2014 12:12 pm

البرمجة بلغة السى – الجزء الثالث – 4- استدعاء الدالة لنفسها :

مثال على استدعاء الدالة لنفسها :

كتابة برنامج لإيجاد مجموع عدد أرقام n من الأولى من الأعداد الطبيعية باستخدام استدعاء الدالة لنفسها .
ملحوظة : الأعداد الصحيحة الموجبة تعرف بالأعداد الطبيعية أى : 1,2,3,4,….n .

الكود:


#include <stdio.h>
int sum(int n);
int main(){
    int num,add;
    printf("Enter a positive integer:\n");
    scanf("%d",&num);
    add=sum(num);
    printf("sum=%d",add);
}
int sum(int n){
    if(n==0)
      return n;
    else
      return n+sum(n-1);    /*self call  to function sum() */
}



الخرج :

الكود:


Enter a positive integer:
5
15


فى هذا البرنامج ، الدالة sum() يتم إطلاقها من نفس الدالة . إذا كان (n) لا يساوى الصفر ، عندئذ فإن الدالة تستدعى نفسها وتمرر دليل أقل بواحد عن الدليل السابق الذى تم استدعاؤها به . افترض أن n قيمتها الابتدائية تساوى (5) عندئذ ، خلال الاستدعاء التالى للدالة يتم تمرير القيمة (4) إلى الدالة ويتم تناقص قيمة الدليل بواحد فى كل استداء للدالة من داخل نفسها . عندما تصبح (n) تساوى (0) فإن قيمة (n) يتم إرجاعها والتى تكون مجموع الأرقام من (5) إلى (1) .
لفهم استدعاء الدالة لنفسها بشكل أفضل إليك المثال التالى :

الكود:


sum(5)
=5+sum(4)
=5+4+sum(3)
=5+4+3+sum(2)
=5+4+3+2+sum(1)
=5+4+3+2+1+sum(0)
=5+4+3+2+1+0
=5+4+3+2+1
=5+4+3+3
=5+4+6
=5+10
=15



كل دالة تعيد استدعاء نفسها يجب إمدادها بوسيلة لإنهاء إعادة استدعاء نفسها . فى هذا المثال عندما تساوى (n) الصفر ، لا يكون هناك إعادة لاستدعاء الدالة لنفسها ويتم إنهاء استدعاء الدالة لنفسها .

مميزات وعيوب استدعاء الدالة لنفسها :

استدعاء الدالة لنفسها يكون أكثر أناقة ويتطلب بضعة متغيرات والذى يجعل البرنامج نظيف . يمكن استخدام استدعاء الدالة لنفسها لتحل محل الكود المتداخل المعقد عن طريق تقسيم المشكلة إلى نفس المشكلة كنوع من فروعها .
من ناحية أخرى ، من الصعب التفكير فى منطق استدعاء الدالة لنفسها . بل من الصعب أيضا تصحيح الكود الذى يحتوى على استدعاء الدالة لنفسها .

Admin
Admin

عدد المساهمات : 1194
تاريخ التسجيل : 28/01/2014

https://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

- مواضيع مماثلة

 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى