递归方法求解汉诺塔问题。
汉诺塔问题的游戏规则:假设有A,B,C三根柱子,在A柱上有n个圆盘,你需要将A柱上所有的圆盘全移动到C柱上,(PS:移动过程中不能将大盘子放在小盘子上面)。
代码如下:
#include<stdio.h>
int s = 0; //检验步数
void move(int n, char a, char b, char c)
{
if(!n) return; //边界问题
move(n-1,a,c,b);
printf("Step %d: %d from %c to %c\n",++s,n,a,c);
move(n-1,b,a,c);
}
int main()
{
int n;
scanf("%d",&n);
move(n,'a','b','c');
printf("最小步数为:%d\n",s);
}##
基本求解思路:假设A柱上有n个盘子,那么就将它上面的n-1个盘子移动到B柱上,再将第n个盘子移动到c柱上,最后将n-1个盘子按照此规律移动到c盘上。