开发者学堂课程【你的第一门 C 语言课:汉诺塔】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/444/detail/5484
汉诺塔
递归求解汉诺塔
汉诺塔游戏:
将前面3个移动到后面的针上
对于游戏的玩法,我们可以简单分解为三个步骤
——将前63个盘子从 X 移动到 Y上。
——将最底下的第 64 个盘子从 X 移动到 Z上。
——将 Y 上的63个盘子移动到Z上。
- 问题一:将 X 上的63个盘子借助Z移到Y上
- 问题二:将 Y 上的63个盘子借助X移到Z上。
- 问题一(“将 X 上的63个盘子借助Z移到Y上”)拆解为:
——将前62个盘子从 X 移动到乙上。
——将最底下的第63个盘子移动到 Y 上。
——将 Z 上的62个盘子移动到 Y 上。
- 问题二(“将 Y 上的63个盘子借助 X 移到 Z上”)拆解为:
——将前62个盘子从 Y 移动到 X 上。
——将最底下的第 63 个盘子移动到Z上。
——将 X 上的 62 个盘子移动到 Y 上。
#include
void hanoi(int n, char X,char y, char z) ;
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);
printf("%C --> %c\n" ,x,z);
hanoi(n-1, y, x, z);
}
}
int main(void )
{
int n;
printf("请输入汉诺塔的层数: ");
scanf ( "%d",&n)
;
hanoi(n, 'X','Y ','Z');
return 0;
}
运行:gcc hanoi.c ss ./a.out
结果:
请输入汉诺塔的层数:3
X
--> Z
X
--> Z
X
--> Y
Z --> Y
X
--> Z
Y --> X
Y --> Z
X
--> Z