بسم الله الرحمن الرحيم
لقد قمنا باخذ سؤال و هو عبارة عن حل لبرج هانوي المشهور و مفهوم السؤال كالتالي :
يوجد عندنا ثلاثة اعمده و العمود الاول فيه عدد من الديسكات مرتبه حسب الحجم من الاكبر الى الاصغر
المطلوب نقل هذه الديسكات الى العمود الثالث و بنفس الترتيب و واحد واحد بحيث ان يكون العمود
الثالث في النهاية كالعمود الاول . و للمساعده تم ايجاد عمود ثاني لاستخدامه كمخزن مؤقت .
مثال لو عندنا ديسكان في العمود الاول و نريد نقلهم الى العمود الثالث فالحل كالتالي :
2<--1
3<--1
3<--2
اما لو كان عندنا ثلالث ديسكات فالحل :
3<--1
2<--1
2<--3
3<--1
1<--2
3<--2
3<--1
و هكذا المطلوب عمل برنامج لنقل 64 ديسك من العمود الاول الى الثالث .
لقد قمت بعمل البرنامج باستخدام الاستدعاء الذاتي للداله و هو كالتالي :
#include<iostream.h>
void towers (int n, int source, int dest, int spare);
void towers (int n, int source, int dest, int spare)
{
if (n == 1)
cout << "Move disk from peg " << source << " to peg " << dest << endl;
else
{
towers(n-1, source, spare, dest);
towers(1, source, dest, spare);
towers(n-1, spare, dest, source);
}
}
void main()
{
int num;
cout << "Enter number of disks to move : ";
cin >> num;
towers(num, 1, 3, 2);
}
و لكن للأسف مدرس الماده يريد الحل باستخدام الفور لووب فهل من الممكن ذلك
مع حد علمي انه اي سؤال يحل بالاستدعاء الذاتي من الممكن ان يحل ب
for loop
و شكرا
الرجاء ممن عنده اي مساعده الرد بسرعة
بانتظار ردكم حتى الفجر
