汉诺塔的递归实现
汉诺塔问题简介: http://zh.wikipedia.org/wiki/%E6%B1%89%E8%AF%BA%E5%A1%94
其递归实现的函数原型为: 'void hanoi(int n, char a, char b, char c);'. 其中字符变量'a', 'b', 'c'分别表示从杆子a, 杆子b, 杆子c, 整数变量'n'表示汉诺塔问题的阶数(即杆子a上有n个待移动到杆子c的圆盘, 杆子b作为临时杆子).
其递归实现的步骤为:
1. 如果n==1, 则直接将唯一的圆盘从杆子a移动到杆子c, 问题解决.
2. 否则, 将杆子a上的(n-1)个圆盘移动到杆子b(通过递归实现),
然后将杆子a上剩余的最大的圆盘移动到杆子c,
最后将杆子b上的(n-1)个圆盘移动到杆子c(通过递归实现), 问题解决.
其递归实现的C代码为:
#include<stdio.h> void hanoi(int, char, char, char); int main(void) { int n=3; printf("输入数字n:\n"); scanf("%d", &n); hanoi(n, 'A', 'B', 'C'); return 0; } void hanoi(int n, char a, char b, char c) { if(n==1) { 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); } }
之前在笔试中遇到的, 记录一下.