汉诺塔问题的求解

关于汉诺塔问题的描述和求解在网络上面一大堆,这里就不多陈述,直接看代码:

#include <iostream>
using namespace std;
void hanio(int count, char first, char second, char third)
{
	if(count > 0)
	{
		hanio(count - 1, first, third, second);
		cout << count << "move from " << first << " to " << third <<endl;
		hanio(count - 1, second, first, third);
	}
}
int main()
{
	hanio(2, 'a', 'b', 'c');
	return 0;
}

以上输出了下面的内容:

xy@ubuntu:~/primer$ ./a.out
1move from a to b
2move from a to c
1move from b to c
xy@ubuntu:~/primer$ 

答案就不说了。关键是看下这个递归的过程,递归的直观的描述是这样的:

将n-1个块从a塔借助c塔移动到b塔;

将第n块从a塔移动到c塔;

将n-1个块从b塔借助a塔移动到c塔;

当n=0时,移动停止;

对应到函数hanio的参数就是(木块数目,a塔,b塔,c塔),这个a塔,b塔,c塔的顺序是有含义的,即从a塔借助b塔,移动到c塔;

后面对这个函数的调用要遵循这个含义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值