C语言之算法初步(汉诺塔--递归算法)
来源:互联网 发布:淘宝drjart天猫旗舰店 编辑:程序博客网 时间:2024/06/06 17:42
个人觉得汉诺塔这个递归算法比电子老鼠的难了一些,不过一旦理解了也还是可以的,其实网上也有很多代码,可以直接参考。记得大一开始时就做过汉诺塔的习题,但是那时代码写得很长很长,也是不理解递归的结果。现在想起来汉诺塔的算法就3个步骤:第一,把a上的n-1个盘通过c移动到b。第二,把a上的最下面的盘移到c。第三,因为n-1个盘全在b上了,所以把b当做a重复以上步骤就好了。所以算法看起来就简单多了。不过,思考过程还是很痛苦的,难以理解。递归中会保存数据的好处在这里又得到体现,太神奇了。
汉诺塔代码如下:
#include<stdio.h>
void
move(
int
n,
char
a,
char
b,
char
c)
{
if
(n==1)
printf
(
"\t%c->%c\n"
,a,c);
//当n只有1个的时候直接从a移动到c
else
{
move(n-1,a,c,b);
//第n-1个要从a通过c移动到b
printf
(
"\t%c->%c\n"
,a,c);
move(n-1,b,a,c);
//n-1个移动过来之后b变开始盘,b通过a移动到c,这边很难理解
}
}
main()
{
int
n;
printf
(
"请输入要移动的块数:"
);
scanf
(
"%d"
,&n);
move(n,
'a'
,
'b'
,
'c'
);
}
这边还找到一个ppt有助于对汉诺塔的理解,可以下载来看看
0 0
- C语言之算法初步(汉诺塔--递归算法)
- C语言之算法初步(汉诺塔--递归算法)
- C语言之算法初步(汉诺塔--递归算法)
- C语言之算法初步(汉诺塔--递归算法)
- 汉诺塔,递归初步算法。
- C语言汉诺塔--递归算法
- C语言经典算法之汉诺塔递归实现
- 递归分治算法之全排列(C语言)
- 算法思考--------汉诺塔c语言实现-------递归
- c语言 递归算法解决汉诺塔问题
- c语言递归算法--深入浅出(1)
- c语言扫雷(递归算法)
- C语言实现递归算法
- 单链表逆置递归算法(C语言)
- C语言-递归算法以及经典递归(Hanoi)
- 算法导论 之 平衡二叉树 - 删除 - 递归[C语言]
- 算法导论 之 平衡二叉树 - 打印 - 递归[C语言]
- 算法导论 之 红黑树 - 打印、销毁 - 非递归[C语言]
- C++面试
- Linux下python2.7.8的安装
- Android DatePicker 显示问题 可分别隐藏年、月或日
- 7.13 面向对象
- kernel_list讲解
- C语言之算法初步(汉诺塔--递归算法)
- 因为CGRect,CGPoint等不是NSObject的子类,因此不能够直接添加到NSMutableArray中,所以要先将其转换成NSObject的子类。NSValue类可以解决这个问题,见NSVa
- tomcat启动的内存溢出解决
- HDU 1853 Cyclic Tour(二分图最优匹配:有向环覆盖)
- bzoj1237 wikioi2430 [SCOI2008]配对 dp
- A*算法入门
- UVA10391
- python 内置函数
- select函数(二)