汉诺塔递归算法

来源:互联网 发布:军工大数据龙头股票 编辑:程序博客网 时间:2024/06/08 00:20

汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有数个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这些个盘子从A座移到B座,其中可利用C柱子。但是有两个要求:

(1)每次只能允许移动一个盘子;

(2)在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上;


分析:首先我们将A作为源柱子,B作为目的柱子,C作为辅助柱子;

1.      先将n-1个盘子从A(源柱子)上移动到C(辅助柱子)上,以B(目的柱子)作为辅助;

2.      当第一步操作完,源柱子上就剩最底下最大的那个盘子,也就是将第n个盘子从A(源柱子)上移动到B(目的)柱子上;

3.      最后,再将n-1个盘子从C(辅助柱子)上移动到B(目的柱子)上,以A(源柱子)作为辅助。


C源代码:

#include<stdio.h>//s源柱子,a辅助柱子,t目标柱子 void hannoi(int n,char s,char a,char t){staticint num; if(n > 0){hannoi(n-1,s,t,a);printf("第%d次移动,第%d块盘子从%c->%c\n",++num,n,s,t);hannoi(n-1,a,s,t);}}int main(void){int n;printf("输入盘子数:");scanf("%d",&n);hannoi(n,'A','B','C');return 0;}






0 0