從上面分析可以看出,當(dāng)n大于等于2時, 移動的過程可分解為
三個步驟:
第一步 把A上的n-1個圓盤移到B上;
第二步 把A上的一個圓盤移到C上;
第三步 把B上的n-1個圓盤移到C上;其中第一步和第三步是類同的。
當(dāng)n=3時,第一步和第三步又分解為類同的三步,即把n`-1個圓盤從一個針移到另一個針上,這里的n`=n-1。 顯然這是一個遞歸過程,據(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ī)等考二級C語言備考:C語言/C++編譯過程 2010年計算機(jī)等級考試二級公共基礎(chǔ)知識教程 考試吧:2010年計算機(jī)等考二級C預(yù)測題匯總 全國計算機(jī)等考二級C語言:程序設(shè)計實戰(zhàn)匯總