asuerhao's Blog

如果有什么做的不到的地方请尽管留言, 我会改进的 : )

汉诺塔的递归实现

asuerhao posted @ 2012年4月28日 13:49 in 积累 with tags c 算法 递归 Hanoi , 1622 阅读

    汉诺塔问题简介: 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);
	}

}

  之前在笔试中遇到的, 记录一下.

Avatar_small
Things to do 说:
2024年2月29日 20:40

The travel addict inside you is craving for new adventure? things to do post will suggest you the new destination for your next journey with all the best spots around the world.


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter