遞歸函數雖然比不上指針,但是在C語言中的地位和複雜程度,但是他也不是隨便就能搞懂的,這裏通過漢諾塔遊戲來進行C語言遞歸的訓練。
一、漢諾塔遊戲介紹
相傳在古印度聖廟中,有一種被稱爲漢諾塔(Hanoi)的遊戲。該遊戲是在一塊銅板裝置上,有三根杆(編號A、B、C),在A杆自下而上、由大到小按順序放置64個金盤(如下圖)。遊戲的目標:把A杆上的金盤全部移到C杆上,並仍保持原有順序疊好。操作規則:每次只能移動一個盤子,並且在移動過程中三根杆上都始終保持大盤在下,小盤在上,操作過程中盤子可以置於A、B、C任一杆上。
二、破解程序
#include <stdio.h>
void hanoi(int n,char x,char y,char z)
{
if(n==1)
{
printf("%c-->%c\n",x,z);
}
else
{
hanoi(n-1,x,z,y);//將第N-1個從x藉助Z移動到Y
printf("%c-->%c\n",x,z);
hanoi(n-1,y,x,z);
}
}
int main()
{
int n;
printf("請輸入漢諾塔的層數");
scanf("%d",&n);
hanoi(n,'X','Y','Z');
return 0;
}
【運行結果】