问题描述:有三根直杆X,Y,Z。X杆上有n只盘子,每次移动一块盘子,小的只能叠在大的上面,将所有盘子从X经由Y杆全部移动到Z杆上。
#include<stdio.h>
void hanoi( int n , char x , char y , char z );
void move( char , char );
int main()
{
int n;
printf("请输入你的盘子数:");
scanf("%d",&n);
hanoi(n,'a','b','c');
return 0;
}
void hanoi(int n,char x,char y,char z)
{
if(n == 1)
move( x , z );
else
{
hanoi( n-1 , x , z , y ); //把n-1个盘子从x经由y移动到z。
move( x , z ); //从x移动到z
hanoi( n-1 , y , x , z ); //把n-1个盘子从y经由x移动到z。
}
}
void move(char c1,char c2)
{
printf("把%c移动到%c\n",c1,c2);
}
汉诺塔递归视频的讲解:https://share.weiyun.com/H3hxLBwE
代码其实很简洁,但递归调用的过程还是比较绕的。
想来想去,还是感觉以视频的方式表达的更清楚,我相信你们也是这么认为的,哈哈哈,有时间请耐心看看视频哦~~
哪里写的不好的还请多多批评指教,共同进步呀~~