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

الخوارزمية العودية / التراجعية و تطبيق عليها

Meriam Drawshy

السؤال

سؤال:(سؤال الأول)
اكتب عملية تراجعية تتلقى عدد صحيح وموجب على العملية ان تطبع العدد بشكل عكسي.
مثال: اذا كان العدد 1897 على العملية ان تطبع  7981.
سؤال:(سؤال الثاني)

اكتب عملية تراجعية تتلقى عددين x و y     على العملية ان تعيد xللقوه y.

شكرا جزيلا.

تم التعديل في بواسطة Wael Aljamal
توضيح السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

مرحبا ميريام،

سأقدم شرح مساعد لكيفية الحل وعليكِ إكمال الشيفرة البرمجية.

المسألة الأولى:

نريد طباعة العدد بالمقلوب أي من الخانة الأعلى للأقل .. 

يجب على الدالة التراجعية التحرك خانة خانة على العدد (القسمة على 10 في كل مرة تنقلنا من الآحاد للعشارت للمئات ..)

و عملية طباعة الخانة الحالية سوف تتمثل بقيمة باقِ قسمة العدد على 10.

ضمن الدالة العودية سنقوم باستدعائها عدة مرات للعدد n حيث في كل مرحلة سوف نقسمه على 10 ونمرر الناتج للخطوة التالية.

n = 123

=> n / 10 = 12

=> n / 10 = 1

=> n / 10 = 0

وعند وضع تعليمة الطباعة بعد إنتها الاستدعائات العودية سوف تتم عملية طباعة النتائج بالمقبوب (يمكنك تجريب وضع الطباعة قبل الاستدعاء العودي و رؤية الفرق).

ما هو شرط توقف الاستدعاء العودي؟ حين يصبح العدد n مساوٍ للصفر.

أرجو محاولة كتابة الدالة قبل رؤية الحل..

.

void printReverse (int n) {
	if (n == 0)
		return;
  
	printReverse(n/10);
	
	cout << n % 10;
}

------------------------------------------

المسألة الثانية:

لدينا دالة ستقوم بعمل جداء تراكمي لعدد X بعدد مرات Y.

سيكون لدينا وسيطين للدالة هما العديين X - Y سيتم استدعاء الدالة Y مرة , ولكل مرة سنقوم بعملية ضرب للعدد X مع ناتج الضرب التراكمي للاستدعاءات الآخرى..

سنعتمد على Y كعداد لمرات الضرب.

ما هو شرط توقف الاستدعاء العودي؟ حين يصبح العدد Y مساوٍ للصفر.

نعيد القيمة 1 لأن X أس 0 تساوي 1.

مع تكرار الاستدعاءات سيتم حساب 1 * X و تعيد X للمرحلة السابقة ومن ثم ستعيد ضربها بـ X وهكذا بعدد مرات Y.

يمكنك استخدام نمط بيانات long long لحساب قيمة أكبر لتجنب حدوث Overflow (النمط int لا يسع إلا قيمة بحدود 2 مليار) أما long يتسع لأضعاف هذه القيمة حتى 18^10.

أرجو محاولة كتابة الدالة قبل رؤية الحل..

.

int my_power (int x, int y) {
	if (y == 0)
      		return 1;
  
  	return x * my_power(x,y-1);
}

بالتوفيق

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...