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

ال Recursive method

مغلق
بدأه C#please في 18 أبريل 2006 · 4 رد · 784 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لكي نقوم باستدعاء أي دالة نفعل ذلك علي النحوالتالي : ( وليكن اسم الدالة MyMethod )

int Got = MyMethod(3434);

هذا إذا كانت الدالة من نوع int وتأخذ parameter من نوع int مثلا

حسنا ... هل يمكنني أن استدعي أي دالة مثل MyMethod حتي لو داخل هذه الدالة نفسها ؟؟

- نعم :

int MyMethod(int Parameter)
{
int result = MyMethod(43);
return result;
}

وهذه هي ال Recursive method

• ال Recursive method هي دوال تستدعي نفسها داخل هيكل الدالة نفسها ..

مثال : أشهر مثال هو مثال المضروب Factorial :

المضروب لعدد ما وليكن n يكون n*(n-1)*(n-2).....1 وهكذا

أي أن مضروب 4 يساوي :

4*(4-1)*(4-2)*(4-3)

والآن إذا عملنا دالة تقوم بحساب المضروب نستخدم فيها ال Recursive method كالتالي :

static int Factorial ( int Number)
{
if( Number <= 1)
{
return 1;
}
else
{
return Number*Factorial(Number-1);
}

وهكذا تم استدعاء ال Factorial methos داخل نفسها

مصدر عربي للموضوع

Enjoy

#2

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

معلومة أخرى : أن بعد الإستدعاء الثاني أو الثالث ... ، لن يتم حذف القيم السابقة ولكن تكون في الذاكرة

مثال : عند إرسال قيمة 1 إلى دالة ثم نضيف قيمة 5 مثلا إلى القيمة المرسلة فيصبح ناتج أحد المتغيرات الموجودة في الدالة 6 منطقي

بعد ذلك نعيد إرسال القيمة السابقة إلى نفس الدالة ، فهل هذا يقوم بحذف قيمة 6 السابقة نقول لا

بالطبع كثير من الأعضاء سيقول لم افهم هذه الجزئية نقول

private int Method(int x)
{
int y = x + 5;
y += this.Method(y);
return y;
}

بالطبع هذه الدالة لا نهائية ، فهي ليست مشكلتنا الآن يمكن نوقفها بجملة IF

المهم إذا أرسلنا قيمة واحد (1) من الخارج سوف تكون قيمة x = 1 ، وقيمة y = 6

وعند الإستدعاء مرة أخرى سوف تتغير قيمة x ، y

ولكن بالنسبة للذاكرة فقيمة x , y والتي نستدعي لها الدالة مرة ثانية

تختلف عن التي أستدعينا الدالة للمرة الأولى

أي أن قيمة x , y الموجدتين في المرة الأولى سوف تظل ثابتة لا تتأثر بتكرار الدالة وذلك قبل جمع القيمة المسترجعة إلى y

أرجوا أن أكون أوضحت

ما فئدة هذا الأسلوب في البرامج العملية : إنشاء شجرة TreeView بها بيانات من قاعدة البيانات

وأيضا في حالة عرض شجرة بمكونات الجهاز Explorer

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#3
int MyMethod(int Parameter)
{
int result = MyMethod(43);
return result;
}

بالنسبة لذلك المود سيعطىstackoverflowexception بسبب أن الدالة لا يوجد لها أى شرط يوقفها من مناداة نفسها

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#4
اقتباس
بالطبع هذه الدالة لا نهائية ، فهي ليست مشكلتنا الآن يمكن نوقفها بجملة IF

لقد نوهت على ذلك في ردي

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#5

اخيرا فيه تجاوب ...................

جزاكم الله خيرا

هذا الموضوع مغلق.

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