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

السؤال

نشر

 اكتب عملية تراجعية تتلقى كبرامتر مصفوفة حدودها من نمط صحيح وتتلقى أيضا عدد صحيح k على العملية ان تعيد عدد المرات التي ظهر فيها k  في المصفوفة

اكتب عملية تراجعية تتلقى كبرامتر مصفوفة حدودها من نمط صحيح على العملية ان تبدّل كل حد موجب ب 1 وكل حد سالب ب 1-.
 

اكتب عملية تراجعية تتلقى كبرامتر مصفوفة حدودها من نمط صحيح وتتلقى أيضا عدد صحيح k على العملية ان تعيد true  اذا ظهر k  في المصفوفة والّا تعيد false.
 

Recommended Posts

  • 0
نشر (معدل)

سأشرح لك مبدأ عمل الدالة التراجعية وأجعلك تجيبين الأسئلة بنفسك، الأمر بسيط جداً فقط ركزي وإفهمي آلية عملها.

لنفرض أن لدينا الدالة التالية :
 

void arrayCount(int arr[]){
//...
}

void تعني أن الدالة لن ترجع لنا أي قيمة، لأننا في هذا المثال نريد طباعة عناصر المصفوفة بإستخدام الدالة التراجعية.

في البداية نحتاج لمتغير من نوع int كـعداد يبدأ من الصفر وهو العنصر الأول في أي مصفوفة.

إذا نضيف المتغير ونسميه counter أي العداد، فيصبح الكود كالتالي:

int counter =0;
void arrayCount(int arr[]){
//...
}

بعد ذلك نبدأ بكتابة الدالة arrayCount:
ما هو الشرط الذي نستطيع من خلاله أن نعرف أننا وصلنا لآخر عنصر في المصفوفة ؟
ما رأيك بالخاصية Length الموجودة مسبقاً في المصفوفة والتي ترجع لنا طول المصفوفة؟
يمكننا الإستفادة من تلك الخاصية في تطبيق فكرتنا من خلال الشرط التالي:

if( counter < arr.Length ){
	//...
}

توضيح الشرط: طالما أن العداد الخاص بنا counter أقل من طول المصفوفة فهذا يعني أننا لم نصل لنهاية المصفوفة، ويتبقى عنصار يجب طباعتها.

إذاً هيا بنا نضيف الشرط للكود الخاص بنا ليكون كالتالي:

int counter =0;
void arrayCount(int arr[]){
	if( counter < arr.Length )
		//...
	}
}

الآن يجب علينا طباعة عناصر المصفوفة من خلال:

Console.WriteLine();

سنقوم بإضافة السطر الخاص بالطباعة في بداية الدالة التراجعية فيصبح الكود الخاص بنا كالتالي:
 

int counter =0;
void arrayCount(int arr[]){
	Console.WriteLine(arr[counter]);
	if( counter < arr.Length )
		//...
	}
}

يجب علينا أن نزيد العداد الخاص بنا counter في كل مرة تستدى به الدالة لضمان طباعة جميع العناصر، لاحظ آخر سطر في الدالة:

int counter =0;
void arrayCount(int arr[]){
	Console.WriteLine(arr[counter]);
	if( counter < arr.Length )
		//...
	}
	counter= counter+1;
}

ماذا تتوقعين أن يكون الناتج في حال تنفيذ الكود التالي وإستدعاء الدالة arrayCount ؟
سيتم طباعة أول عنصر في المصفوفة فقط, لماذا؟ لأننا ببساطة لم نقم بإستدعائها إلا مرة واحدة فقط وبالتالي سيطبع العنصر الأول فقط.

سنقوم بإستدعاء الدالة من داخلها ( هذا هو مفهوم الدالة التراجعية أو recursion method/function ) في حال بقي عناصر يجب طباعتها ( الشرط الذي أضفناه ), لاحظ الكود الذي أضفناه:
 

int counter =0;
void arrayCount(int arr[]){
	Console.WriteLine(arr[counter]); //طباعة عناصر المصفوفة
	if( counter < arr.Length )// في حال كان هناك عناصر أُخرى باقية سيتم إستدعاء الدالة مرة أخرى لحين الوصول إلى آخر المصفوفة
		arrayCount(arr); // يتم إستدعاء الدالة نفسها من داخلها لطباعة العناصر التالية
	}
	counter= counter+1; //  زيادة العداد في كل  مرة تستدعى فيها الدالة
} 


وبهذا نكون قد فهما مبدأ الrecursion functions/methods.

مرفق صورة توضيحية  لآلية عمل الـrecursion functions/methods:



 

recursion.jpg

أطيب الأمنيات بالتوفيق.

تم التعديل في بواسطة Abdulraheem Barghouthi

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...