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

[تنبيه - عدم تكرار المخالفة :]ساعدوني في Recursion

مغلق
بدأه explorer12983 في 29 ديسمبر 2007 · 2 رد · 674 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا اشكر هذا المنتدى الفاضل

والسؤال هو ... برنامج مكتوب بالrecursion يقوم بإيجاد الرقم الاكبر في المصفوفه

والسؤال الثاني .. عمل برنامج يقوم بعكس المصفوفه وطباعتها باستخدام recursion

ولكم جزيل الشكر والاحترام

ملاحظه : ابغا البرنامج مكتوب من عند #inclode

لأني جديد على اللغه

#2

اخي الفاضل ..

انت لم تضع اي محاوله لك بهذا الخصوص ولكن سأشرح لك الموضوع وان شاءالله تستفيد انت وكل عضو لم يفهم هذا الموضوع من الشرح .

السؤال الذي وضعته انت صيغته هي التاليه ..

اقتباس
write a program that will find the largest value in an unsorted array of integers using a recursion

الrecursion هنا هو خوارزمية divide & conquer algorithm ..

لذلك في بعض الاحيان السؤال يكون بالصيغة التاليه فهي واضحه اكثر للكل ..

اقتباس
write a program that will find the largest value in an unsorted array of integers using a recursive divide & conquer algorithm

فيمكن بواسطة هذه الخوارزمية القيام بمعرفة اكبر عدد بين عناصر المصفوفه ذات البعد الواحد بالاستدعاء الذاتي ..

تتلخص هذه الخوارزمية بتقسيم المصفوفة الى نصفين ( ايمن وايسر ) ..

الكود الخاص بالبرنامج وهو تطبيق للخوارزمية كالتالي ..

#include<iostream.h>
int max(int *array, int length)
{
  int n1,n2;
  if(length == 1) return array[0];


  n1 = max(array , length/2);
  n2 = max(array + length/2 , length - lenght/2);
  return (n1 > n2 ? n1 : n2);
}


int main()
{
   int A[] = {2,7,91,8,9,11};


cout << max(&A,6);

}

في الكود اعلاه تم تكوين دالة max والتي فائدتها البحث عن اكبر عنصر بين عناصر المصفوفة A (وهو العنصر 91 ) عن طريق ارسال المصفوفة للدالة وعدد مواقعها ..

اول امر يختبر في الدالة هو اذا كان عدد عناصر المصفوفة مساويا للواحد .. فهذا يعني ان العنصر نفسه هو اكبر العناصر لانه الوحيد المكون لها ..

بعدها يتم استعداء المتغيرين n1 و n2 لكي تتم بها الخوارزمية ..

المتغير الاول يقسم المصفوفة لنصفين ويخزن فيه قيمة العنصر الوسط ..

والمتغير الثاني يستخدم للتزحيف وخزن الموقع الاخر الذي يحقق المعادلة التي امامه ..

بعدها نصل لشرط الاختبار اختبار ايهما اكبر n1 ام n2 ويرجع القيمة الاكبر لتطبع في الدالة الريئيسية main() .. .

وبإختصار ممكن تلخيص الكود بالشكل التالي ..

if (anarray has only one item)
   maxArray(anarray) is the item in anarray
else if (anarray has more than one item)
   maxArray(anarray) is the maximum of
		maxArray(left half of anarray) and
		maxArray(right half of anarray)

هذا ما استطيع المساعده به .. وأي شئ غير مفهوم او واضح انا في الخدمة ...

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

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#3

هذا الموضوع يشتمل على مخالفة أو أكثر لقواعد المشاركة.

الرجاء التنبه وعدم تكرار المخالفة في مواضيعك القادمة، وهذا بمثابة إشعار للأهمية.

وفي حال التكرار سيتعرض موضوعك للإغلاق والحذف!!!

قواعد المشاركة

/index.php?showtopic=29343

لا أنسى أن أشكر الأخ سنان الذي دائماً ما يساعد الأخوة و لكن وجب تنبيه صاحب الموضوع.

تحياتي ,,

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 29 ديسمبر 2007 في 23:18

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

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