السلام عليكم ورحمة الله وبركاته
ممكن برنامج يحتووي على 2 ريكيرجن !
يعني مثال :)
جزاكم الله خير
السلام عليكم ورحمة الله وبركاته
ممكن برنامج يحتووي على 2 ريكيرجن !
يعني مثال :)
جزاكم الله خير
ممكن جدا:
void call_me();
int main()
{
call_me();
}
void call_me()
{
static int call_count = 0;
++call_count;
if (call_count == 2) return;
call_me();
}هذا النوع من الـ recursion يسمى بـ tail recursion لوجود أستدعاء لنفسها كأخر statement بها.
و الله ولي التوفيق
تم تعديل هذه المشاركة بواسطة C++er في 25 ديسمبر 2012 في 21:51
مدونتي: C++ Tips and Tricks
C++er كتب:ممكن جدا:
void call_me(); int main() { call_me(); } void call_me() { static int call_count = 0; ++call_count; if (call_count == 2) return; call_me(); }هذا النوع من الـ recursion يسمى بـ tail recursion لوجود أستدعاء لنفسها كأخر statement بها.
و الله ولي التوفيق
شكررا لك ، جزاك الله خير
لكن ممكن شرح لهذه الدالة !
بحثت عنها ماوجدت أنه كود يحتوي على 2 ريكيرجن ،
اعتذر لكن أحتااج أكثر من مثال وشرح لها ..
اقتباسلكن ممكن شرح لهذه الدالة !
الداله main تقوم بإستدعاء الدالة call_me و التى تقوم بتعريف متعير يحتفظ بقيمته طوال عمل البرنامج و يتم وضع قيمته مرة واحده فقط فى اول مره يتم استدعاء الداله فقط و هي صفر:
1- يتم زيادة قيمة المتغير call_count لتصبح 1.
2- إذا كانت قيمة المتغير call_count تساوى 2 يتم الرجوع من الداله (و هذا لن يحدث لأن قيمة المتغير هي 1).
3- يتم أستدعاء الدالة call_me مره اخرى.
4- يتم زيادة قيمة المتغير call_count لتصبح 2.
5- يتم مقارنة قيمة call_count مع 2 و حيث انهما متساويان يتم الخروج من الداله و الرجوع للإستدعاء السابق.
6- ستم الخروج من الإستدعاء الأول و الرجوع للدالة main.
صراحة هذا ابسط شرح لها فإن لم تستوعبه فقم بالبحث داخل القسم - و هو المفترض ماكنت تفعله اولا - و ستجد العديد من المواضيع بشرح اكثر تفصيلا.
و الله ولي التوفيق
مدونتي: C++ Tips and Tricks
C++er كتب:الداله main تقوم بإستدعاء الدالة call_me و التى تقوم بتعريف متعير يحتفظ بقيمته طوال عمل البرنامج و يتم وضع قيمته مرة واحده فقط فى اول مره يتم استدعاء الداله فقط و هي صفر:
1- يتم زيادة قيمة المتغير call_count لتصبح 1.
2- إذا كانت قيمة المتغير call_count تساوى 2 يتم الرجوع من الداله (و هذا لن يحدث لأن قيمة المتغير هي 1).
3- يتم أستدعاء الدالة call_me مره اخرى.
4- يتم زيادة قيمة المتغير call_count لتصبح 2.
5- يتم مقارنة قيمة call_count مع 2 و حيث انهما متساويان يتم الخروج من الداله و الرجوع للإستدعاء السابق.
6- ستم الخروج من الإستدعاء الأول و الرجوع للدالة main.
صراحة هذا ابسط شرح لها فإن لم تستوعبه فقم بالبحث داخل القسم - و هو المفترض ماكنت تفعله اولا - و ستجد العديد من المواضيع بشرح اكثر تفصيلا.
و الله ولي التوفيق
جزاك الله خير ,,
وجدت مثال ، هل صحيح ماوجدت ! أنه ريكيرجن داخل ريكرجن
Int pow(int n,i)
{
If(i==1)
Return n ;
Else
{
Int partial =pow(n,I/2);
If(i%2==0)
Return partial*partial;
Else
Return partial*partial*n;
}
}