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

كيف يعمل هذا الكود بإستخدام الداله التي تنادي نفسها

بدأه l7ool في 23 مايو 2012 · 7 رد · 711 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

هذا الكود راح يستخدم الريكيرجن فنكشن وراح يرسل الرقم 9 للداله

السؤال هنا

"لو سمحت، ابغى تتبع Trace للكود (ناتج ..ناتج) "

اشوف في النهايه راح يرسل قيمه صفر

كيف وصل لهذي القيمه ؟ :blink:

#include<iostream>
using namespace std;

int myfunction(int p)
{

int ans;
if(p<=1)
ans=1;
else
if (p%2==0)

return p*myfunction(p-1);
else
ans=myfunction(p-1);
return ans;
}
int main() {



myfunction(9);

    system("PAUSE");


}

طبعاً سويت رن للكود طلع لي 384 !

لكن حساب إجابه استاذتي ماطلع كذا وطلع ناتج نهايته الداله ترسل قيمه (0) ؟

ويوم سعيد للجميع :)

#2
اقتباس
طبعاً سويت رن للكود طلع لي 384 !

لكن حساب إجابه استاذتي ماطلع كذا وطلع ناتج نهايته الداله ترسل قيمه (0) ؟

لا أجابة استاذك صحيحة لكن كان عليك تكتب الــ:

else
if (p%2==0)

بالطريقة:

else if (p % 2 == 0)

الكود النهائى:

#include<iostream>
#include <cstdlib>
using namespace std;

int myfunction(int p)
{
    int ans;
    if (p <= 1)
        ans = 1;
    else if (p % 2 == 0)
        return p * myfunction(p - 1);
    else
        ans = myfunction(p - 1);
    return ans;
}

int main()
{
    cout << myfunction(9) << endl;
    system("PAUSE");
}

والمخرجات كما قال استاذك:

384
sh: PAUSE: not found
RUN SUCCESSFUL (total time: 62ms)

والله من وراء القصد

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#3

الكود صحيح

فقط ينقصه أن تكتبه هكذا

	if() 

 	...

	else if ()

 	...

	else

 	...

تم تعديل هذه المشاركة بواسطة مومو (momo) في 23 مايو 2012 في 14:46

i love you mama

#4

الصورة التالية توضح لك فكرة الاستدعاء الذاتى recursive functions للدوال :

post-247365-067054300 1337772301_thumb.p

والله من وراء القصد

المرفقات
rec.png

تم تعديل هذه المشاركة بواسطة AudaNix في 23 مايو 2012 في 15:24

1

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#5

رائع يا AudaNix

من الرد الأخير فهمت كيف أرجع الداله وأتتبعها

أنا مشكلتي كانت إني أبدى تتبعها من رقم 9 والمفروض ابداها من صفر :blink:

الله يعطيك العافيه

#6
l7ool كتب:

رائع يا AudaNix

من الرد الأخير فهمت كيف أرجع الداله وأتتبعها

أنا مشكلتي كانت إني أبدى تتبعها من رقم 9 والمفروض ابداها من صفر :blink:

الله يعطيك العافيه

على ما اعتقد ان الكود يتوقف عند الواحد ولايصل الى الصفر اي ان شجرة الاستدعاء تنتهي عند الواحد الذي يمثل leaf

p(9) = p(8)
p(8)= 8*p(7)
p(7)= p(6)
..
..
..
..
p(2)= 2*p(1)
p(1) = 1

اي ان الداله تقوم بعمل مضروب الاعداد الزوجيه 8*6*4*2*1

تحياتي

تم تعديل هذه المشاركة بواسطة mental-driller في 23 مايو 2012 في 21:17

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#7
mental-driller كتب:

على ما اعتقد ان الكود يتوقف عند الواحد ولايصل الى الصفر اي ان شجرة الاستدعاء تنتهي عند الواحد الذي يمثل leaf

أخى الفاضل الصورة للتوضيح فقط وسهولة تصور المشكلة

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#8
AudaNix كتب:

أخى الفاضل الصورة للتوضيح فقط وسهولة تصور المشكلة

عفوا اخي AudaNix على مايبدو ان هناك سؤ فهم بسيط، ردي كان للاخ l7ool الذي وضع الموضوع حيث انه يريد تتبع البرنامج من ال0 ولكن البرنامج يتوقف عند الواحد اي انه لا يصل الى الصفر ابدا

تقبل مروري

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…