الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]طلب شرح وأمثلة عن العوديّة

بدأه bashayer12 في 25 ديسمبر 2012 · 4 رد · 697 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

ممكن برنامج يحتووي على 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

#3
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 ريكيرجن ،

اعتذر لكن أحتااج أكثر من مثال وشرح لها ..

#4
اقتباس
لكن ممكن شرح لهذه الدالة !

الداله 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.

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

و الله ولي التوفيق

1

مدونتي: C++ Tips and Tricks

#5
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;
}
}

مواضيع مشابهة