從上面分析可以看出,當(dāng)n大于等于2時(shí), 移動(dòng)的過(guò)程可分解為
三個(gè)步驟:
第一步 把A上的n-1個(gè)圓盤(pán)移到B上;
第二步 把A上的一個(gè)圓盤(pán)移到C上;
第三步 把B上的n-1個(gè)圓盤(pán)移到C上;其中第一步和第三步是類(lèi)同的。
當(dāng)n=3時(shí),第一步和第三步又分解為類(lèi)同的三步,即把n`-1個(gè)圓盤(pán)從一個(gè)針移到另一個(gè)針上,這里的n`=n-1。 顯然這是一個(gè)遞歸過(guò)程,據(jù)此算法可編程如下:
move(int n,int x,int y,int z)
{
if(n==1)
printf("%c-->%c\n",x,z);
else
{
move(n-1,x,z,y);
printf("%c-->%c\n",x,z);
move(n-1,y,x,z);
}
}
main()
{
int h;
printf("\ninput number:\n");
scanf("%d",&h);
printf("the step to moving %2d diskes:\n",h);
move(h,'a','b','c');
}
move(int n,int x,int y,int z)
{
if(n==1)
printf("%-->%c\n",x,z);
else
{
move(n-1,x,z,y);
printf("%c-->%c\n",x,z);
move(n-1,y,x,z);
}
}
main()
{ ……
move(h,'a','b','c');
}
相關(guān)推薦:計(jì)算機(jī)等考二級(jí)C語(yǔ)言備考:C語(yǔ)言/C++編譯過(guò)程北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |