البرمجة بلغة السى – الجزء الثالث – 4- استدعاء الدالة لنفسها :
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: الفئة الأولى :: منتدى البرمجة بلغة السى C Programming
صفحة 1 من اصل 1
البرمجة بلغة السى – الجزء الثالث – 4- استدعاء الدالة لنفسها :
البرمجة بلغة السى – الجزء الثالث – 4- استدعاء الدالة لنفسها :
مثال على استدعاء الدالة لنفسها :
كتابة برنامج لإيجاد مجموع عدد أرقام n من الأولى من الأعداد الطبيعية باستخدام استدعاء الدالة لنفسها .
ملحوظة : الأعداد الصحيحة الموجبة تعرف بالأعداد الطبيعية أى : 1,2,3,4,….n .
الخرج :
فى هذا البرنامج ، الدالة sum() يتم إطلاقها من نفس الدالة . إذا كان (n) لا يساوى الصفر ، عندئذ فإن الدالة تستدعى نفسها وتمرر دليل أقل بواحد عن الدليل السابق الذى تم استدعاؤها به . افترض أن n قيمتها الابتدائية تساوى (5) عندئذ ، خلال الاستدعاء التالى للدالة يتم تمرير القيمة (4) إلى الدالة ويتم تناقص قيمة الدليل بواحد فى كل استداء للدالة من داخل نفسها . عندما تصبح (n) تساوى (0) فإن قيمة (n) يتم إرجاعها والتى تكون مجموع الأرقام من (5) إلى (1) .
لفهم استدعاء الدالة لنفسها بشكل أفضل إليك المثال التالى :
كل دالة تعيد استدعاء نفسها يجب إمدادها بوسيلة لإنهاء إعادة استدعاء نفسها . فى هذا المثال عندما تساوى (n) الصفر ، لا يكون هناك إعادة لاستدعاء الدالة لنفسها ويتم إنهاء استدعاء الدالة لنفسها .
مميزات وعيوب استدعاء الدالة لنفسها :
استدعاء الدالة لنفسها يكون أكثر أناقة ويتطلب بضعة متغيرات والذى يجعل البرنامج نظيف . يمكن استخدام استدعاء الدالة لنفسها لتحل محل الكود المتداخل المعقد عن طريق تقسيم المشكلة إلى نفس المشكلة كنوع من فروعها .
من ناحية أخرى ، من الصعب التفكير فى منطق استدعاء الدالة لنفسها . بل من الصعب أيضا تصحيح الكود الذى يحتوى على استدعاء الدالة لنفسها .
مثال على استدعاء الدالة لنفسها :
كتابة برنامج لإيجاد مجموع عدد أرقام 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) الصفر ، لا يكون هناك إعادة لاستدعاء الدالة لنفسها ويتم إنهاء استدعاء الدالة لنفسها .
مميزات وعيوب استدعاء الدالة لنفسها :
استدعاء الدالة لنفسها يكون أكثر أناقة ويتطلب بضعة متغيرات والذى يجعل البرنامج نظيف . يمكن استخدام استدعاء الدالة لنفسها لتحل محل الكود المتداخل المعقد عن طريق تقسيم المشكلة إلى نفس المشكلة كنوع من فروعها .
من ناحية أخرى ، من الصعب التفكير فى منطق استدعاء الدالة لنفسها . بل من الصعب أيضا تصحيح الكود الذى يحتوى على استدعاء الدالة لنفسها .
مواضيع مماثلة
» البرمجة بلغة السى – الجزء الثالث – 1- مقدمة الدوال Functions
» البرمجة بلغة السى – الجزء الثالث – 3- أنواع الدوال المعرفة بمعرفة المستخدم
» البرمجة بلغة السى - أمثلة الجزء الأول - البرنامج الثالث : جمع عددان صحيحان .
» البرمجة بلغة السى – الجزء الثالث – 2- الدوال المعرفة بمعرفة المستخدم User-defined functions
» البرمجة بلغة السى – الجزء الثانى -2- حلقة for
» البرمجة بلغة السى – الجزء الثالث – 3- أنواع الدوال المعرفة بمعرفة المستخدم
» البرمجة بلغة السى - أمثلة الجزء الأول - البرنامج الثالث : جمع عددان صحيحان .
» البرمجة بلغة السى – الجزء الثالث – 2- الدوال المعرفة بمعرفة المستخدم User-defined functions
» البرمجة بلغة السى – الجزء الثانى -2- حلقة for
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: الفئة الأولى :: منتدى البرمجة بلغة السى C Programming
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى