汉诺塔问题
汉诺塔问题是一个经典的数学问题,通常用来演示递归算法。问题的背景是:有三根杆子(A、B、C),在A杆上有N个大小不一的圆盘,要求将所有圆盘从A杆移动到C杆,遵循以下规则:
- 一次只能移动一个圆盘。
- 不能将较大的圆盘放在较小的圆盘上。
- 可以使用B杆作为辅助杆。
解决汉诺塔问题的基本思路是:将N-1个圆盘从A杆移动到B杆,然后将第N个圆盘从A杆移动到C杆,最后将B杆上的N-1个圆盘移动到C杆上。
汉诺塔问题在C语言中是一个经典的函数递归问题
我们可以在汉诺塔问题中发现规律:
C语言代码实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void move(char pos1, char pos2)
{
printf("%c->%c\n", pos1, pos2);
}
//N代表盘子的数量
//pos1:起始位置
//pos2:中转位置
//pos3:终止位置
void Hanio(int n,char pos1, char pos2, char pos3)
{
if (n == 1)
{
move(pos1, pos2);
}
else
{
Hanio(n - 1, pos1, pos3, pos2);
move(pos1, pos2);
Hanio(n - 1, pos2, pos1, pos3);
}
}
int main()
{
Hanio(2, 'A', 'B','C');
}