【C语言】递归-汉尼塔问题
问题描述:
有三个柱子A、B、C,A柱子上有按从上到下的顺序从小到大叠在一起的n个圆盘,要把这些圆盘移动到c柱上去,要求每次只能移动一个圆盘,而且在移动的过程中盘子的顺序不能发生改变。
思路:把问题分解成三个小问题:
1.把A柱上的n-1个圆盘移动到B柱上;
2.把A柱上剩下来的一个圆盘移动到C柱上;
3.吧B柱上的n-1个圆盘移动到C柱上。
代码:
#include<stdio.h>
void Move(char source,char target);
void Hanoi(int n,char source,char help,char target);
int main(){
Hanoi(3,'A','B','C');
return 0;
}
void Move(char source,char target){
printf("%c->%c\n",source,target);
}
void Hanoi(int n,char source,char help,char target){
if(n==1) Move(source,target);
else{
Hanoi(n-1,source,target,help);
Move(source,target);
Hanoi(n-1,help,source,target);
}
}