递归思想
- 如果是一个盘子
直接将a柱子上的盘子从a移动到c - 否则将n-1个盘子放到b,然后再把最后一个放到c,最后把b上的盘子放到c上
但是怎么把n-1个盘子放到b呢?要把n-2个盘子放到c上,然后把n-1个盘子放到b上,最后把c上的盘子放到b上就行了
但是怎么把n-2个盘子放到c呢?要把n-3个盘子放到c上,然后把n-2个盘子放到b上,最后把c上的盘子放到b上就行了
……
以此类推 - 最后我们怎么样把n-1个盘子放到c上呢,我们可以按照上面的递归方法比如先把n-1个盘子放到a上然后把n-2个盘子放到c上,最后把在a上的盘子都放到c上就行了……
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
void hanoi(int n,char a,char b,char c)
{
if(1==n)
{
printf("%c-->%c\n",a,c);
}
else
{
hanoi(n-1,a,c,b);
printf("%c-->%c\n",a,c);
hanoi(n-1,b,a,c);
}
}
int main()
{
int n;
scanf("%d",&n);
hanoi(n,'a','b','c');
return 0;
}