习题3.10 汉诺塔的非递归实现

题目详情我就不描述了,很经典的问题,然后问题是,用递归来做是很好理解,很顺理成章的问题,但是用非递归,对我来说感觉很别扭,断断续续看了两个都领悟,网上对于非递归的方法其实也说的不清不楚,也可能是我比较笨,我尝试讲一下我的理解。


首先理解什么是汉诺塔,可以看这个视频:「递归练习」汉诺塔

看完之后,然后可以列一下汉诺塔的解法:

盘数 解法
1 a->c
2 a->b
a->c
b->c
3 a->c
a->b
c->b
a->c
b->a
b->c
a->c
4
其实2个盘的情况就是解题的关键了。全部步骤总结起来就三步:

1、将0到n-1盘从a移到b;

2、将第n盘从a移到c;

3、最后把0到n-1盘从b移到c;

在程序中就是,慢慢将n-1分解,直到1。

那么用非递归方法利用就是堆栈

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值