漢諾塔的遞歸實現算法,將A中的圓盤借助B圓盤完全移動到C圓盤上,
每次只能移動一個圓盤,並且每次移動時大盤不能放在小盤上面
遞歸函數的偽算法為如下:
if(n == 1)
直接將A柱子上的圓盤從A移動到C
else
先將A柱子上的n-1個圓盤借助C柱子移動到B柱子上
直接將A柱子上的第n個圓盤移動到C柱子上
最後將B柱子上的n-1個圓盤借助A柱子移動到C柱子上
該遞歸算法的時間復雜度為O(2的n次方),當有n個圓盤時,需要移動圓盤2的n次方-1次
操作系統:ubuntu
編譯軟件:gcc
結果截圖:

源代碼:
#include<stdio.h>
void move(int,char,char,char);
int main()
{
//A、B、C分別代表三個柱子
char ch1 = 'A';
char ch2 = 'B';
char ch3 = 'C';
//n代表圓盤的個數
int n;
printf("請輸入圓盤個數:");
scanf("%d",&n);
move(n,ch1,ch2,ch3);
return 0;
}
//將n個圓盤從x柱子借助y柱子移動到z柱子上
void move(int n,char x,char y,char z)
{
if(n == 1)
printf("圓盤編號%d:從%c移動到%c\n",n,x,z);
else
{
move(n-1,x,z,y);
printf("圓盤編號%d:從%c移動到%c\n",n,x,z);
move(n-1,y,x,z);
}
}