漢諾塔問題

問題描述:

從左到右 A  B  C 柱 大盤子在下, 小盤子在上, 藉助B柱將所有盤子從A柱移動到C柱, 期間只有一個原則: 大盤子只能在小盤子的下面.每次只能移送一個盤子。

採用遞歸方法解決漢諾塔問題.遞歸,簡單來說就是方法內部自己調用自己, 同時也一定有一個結束點. 方法調用棧的調用過程就是從主線程開始調用方法進行不停的壓棧和出棧操作. 方法的調入就是將方法壓入棧中, 方法的結束就是方法出棧的過程.

代碼如下:

#include <stdio.h>
#include <stdlib.h>
void hannuo(int n,char x,char y,char z)
{
if(n==1)
 printf("請把第%d個盤子從%c搬到第%c個柱子上\n",n,x,z);
else
{
hannuo(n-1,x,z,y);//現將前n-1個盤子藉助於y柱子從x柱子搬到z柱子
 printf("請把第%d個盤子從%c搬到第%c個柱子上\n",n,x,z);//將第n個盤子放到z柱子上
hannuo(n-1,y,x,z);//將n-1個盤子藉助於x柱子從y柱子搬到z柱子
}
}
int main()
{
int num;
scanf("%d",&num);
hannuo(num,'A','B','C');
system("pause");
return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章