递归-Hanio塔问题

直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。

简单的算法:假设塔座a、b、c排成一个三角形,a-b-c-a构成顺时针循环,在移动圆盘的过程中,若是奇数次移动,则将最小的圆盘移动到顺时针方向的下一个塔座上;若是偶数次移动,则保持最小的圆盘不动,而在其他两个塔座之间,将较小的圆盘移动到另一个塔座上去。

使用递归算法实现如下

1 void hanoi (int n,int a ,int b, intc)
2 {
3   if(n>0){
4 hanoi(n-1,a,c,b);
5 move(a,b);
6 hanoi(n-1,c,b,a);
7 }  
8 }

hanoi(n,a,b,c)表示将塔座a上自下而上,由大到小叠放在一起的个圆盘依移动规则移至塔座b上并按同样的顺序叠放。在移动的过程中,以塔座c作为辅助塔座。move(a,b)表示将塔座a上编号为n的圆盘移至塔座b上。

转载于:https://www.cnblogs.com/hans-boos/p/3650953.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值