以遞迴方式設計一函數可以解答河內之塔的問題。並將你的程式各行編號, 並假設要搬動的碟子數為2個, 列出遞迴函數處理的行號順序
謝謝喔 用c++回答
2006-06-29 12:05:25 · 3 個解答 · 發問者 匿名唷唷 1 in 電腦與網際網路 ➔ 程式設計
1 #include
2 using namespace std;
3 void hanoi(int i,int begin,int mid,int dest)
4 {
5if(i==1)
6cout<<"將第 "<
7else
8{
9hanoi(i-1,begin,dest,mid);
10cout<<"將第 "<
11hanoi(i-1,mid,begin,dest);
12}
13 }
14 int main()
15 {
16int n;
17cout<<"請問要輸入幾個碟子數:";
18cin>>n;
19hanoi(n,1,2,3);
20return 0;
21 }
以碟子數為2為例,處理行號順序為:
4-->5-->9-->4-->5-->6-->13-->10-->11-->4-->5-->6-->13
2006-06-29 16:00:18 · answer #1 · answered by Almond 6 · 0⤊ 0⤋
用TC行不行啊…
用TC行的話…手邊有一隻能輸入碟子數
還能把過程印出的程式…
手邊沒C++的編輯器…
2006-07-01 08:14:18 補充:
#include
#include
using namespace std;
intCounter;/* 計數器變數*/
/* --------------------------------------------------- */
/* 遞迴解河內塔問題 */
/* --------------------------------------------------- */
int Hanoi(char From,char To,char Auxiliary,int N)
{
if ( N == 1 )/* 遞迴結束條件 */
{
Counter++; /* 計數器遞增*/
cout<<"Step"<
cout<<"Move disk 1 from peg"<
else/* 遞迴執行部分 */
{
Hanoi(From,Auxiliary,To,N-1); /* 將目的樁和輔助樁交換*/
Counter++;/* 計數器遞增*/
cout<<"Step"<
}
}
/* --------------------------------------------------- */
/* 主程式 */
/* --------------------------------------------------- */
int main ()
{
int Number;/* 鐵盤數目變數*/
char Source='a'; /* 輸入來源樁 */
char Destination='b'; /* 輸入輔助樁*/
char Auxiliary='c'; /* 輸入目的樁*/
Counter = 0;
cout<<"The Tower of Hanoi program.\n";
cout<<"Please enter the number of disks : ";
cin>>Number; /* 輸入鐵盤數*/
Hanoi(Source,Destination,Auxiliary,Number);/* 呼叫遞迴函式*/
return 0;
}
2006-07-01 04:14:18 · answer #2 · answered by 小仁 5 · 0⤊ 0⤋
用搜尋下載免費的自由軟體 Dev-C++ 編譯器
2006-06-30 06:39:32 · answer #3 · answered by Big_John-tw 7 · 0⤊ 0⤋