對於漢諾塔問題,當只移動壹個圓盤時,圓盤直接從A針移動到C針..如果移動的磁盤是n(n & gt;1),分為幾個步驟:將(n-1)個碟片從A針移動到B針(借助C針);織針A上的最後壹個圓盤移動到織針C;(n-1)B針上的圓盤被移動到C針上(在A針的幫助下)。每做壹次,動盤就少壹個,逐漸減少。最後,當n為1時,整個移動過程完成。
因此,可以設計壹個遞歸函數來求解漢諾塔問題,圓盤的整個移動過程都可以通過遞歸來實現。解決問題的過程是對實際操作的模擬。
程序代碼
# include & ltstdio.h & gt
int main()
{
int hanoi(int,char,char,char);
int n,counter
printf("輸入磁盤數量:");
scanf("%d ",& ampn);
printf(" \ n ");
counter=hanoi(n,' A ',' B ',' C ');
返回0;
}
int hanoi(int n,char x,char y,char z)
{
int move(char,int,char);
如果(n==1)
move(x,1,z);
其他
{
河內(n-1,x,z,y);
移動(x,n,z);
河內(n-1,y,x,z);
}
返回0;
}
int move(char getone,int n,char putone)
{
靜態int k = 1;
printf("%2d:%3d # %c - %c\n ",k,n,getone,putone);
如果(k++%3==0)
printf(" \ n ");
返回0;
}