اذهب إلى المحتوى
  • 0

recursion

سارة الحميدي

السؤال

Recommended Posts

  • 0

مرحباً بك @سارة الحميدي.

الـ Recursion أو الإستدعاء الذاتي كمفهوم  هو طريقة لحل المشاكل إعتماداً على تقسيم المشكلة إلى عدد من الأجزاء الصغيرة وحلها مع بعض لتكوين حل شامل للمشكلة الأساسية.

أما برمجياً يمكن تعريفه بأنه إستدعاء الدالة (Function) لنفسها عدة مرات بمعطيات مختلفة أقل صعوبة في الحل لإيجاد الغرض المطلوب منها.

من أجل التوضيح أدناه يوجد مثال لإيجاد مضروب العدد بإستخدام الإستدعاء الذاتي (يعرف مضروب العدد Factorial بأنه حاصل ضرب العدد في جميع الأعداد الأصغر منه ماعدا الصفر):

def factorial(n):
  if n <= 1:
    return 1;
  else
  	return n * factorial(n-1)

يلاحظ أنه تم أولا التوصل للحلول الأبسط أولا (مضروب العدد 1 هو 1 بدون حساب).

بعدها إذا كان العدد المدخل أكبر من الواحد فتقوم الدالة بضرب هذا العدد مع حاصل إستدعائها بنفسها للعدد ناقصاً واحد.

يمكن توضيح خطوات التنفيذ من خلال المثال الآتي لإيجاد مضروب العدد 3:

>>> factorial(3)
>>> return 3 * factorial(2)
>>> return 3 * 2 * factorial(1)
>>> return 3 * 2 * 1 // لأنه معطى أن مضروب العدد 1 يساوي 1
>>> return 6
>>> 6

أتمنى أن الشرح قد أفادك.

تحياتي لك.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 50 دقائق مضت قال سارة الحميدي:

اريد شرح للاستدعاء الذاتي  اذا ممكن لانو مش فاهمته كويس

السلام عليكم,

الاستدعاء الذاتي هو عندما تستدعي دالة نفسها, ونستخدم هته الطريقة في الكثير من الأحيان لحل المشاكل البرمجية, سأعطيك مثالا بلغة الجافاسكربت, مثلا:

// هذا مثال بسيط جدا لبرنامج أعطيه عددين موجبين ثم يرجع لي العدد الأول أس العدد الثاني
// Math.pow() عموما هته الدالة موجودة مسبقا هي

// الدالة بدون استخدام الاستدعاء الذاتي
function pow(number, power){
    let result = number
    for(let i = 1; i < power; i++){
        result = result * number
    }
    return result
}

//الدالة باستخدام الاستدعاء الذاتي
function pow(number, power){
    if(power > 1)
        return number * pow(number, power-1)
    else
        return number
}

إذا كان هناك شيء لم تستوعبيه أو لم تفهميه أنا في الخدمة.

تحياتي الحارة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...