递归之汉诺塔问题

汉诺塔问题

问题描述:

(时间限制:3000MS 内存限制:32768KB)
汉诺塔问题是指:有三根柱子A、B、C,A柱上有n个大小不等的圆盘,大盘在下,小盘在上。要求将所有圆盘从A柱搬到C柱上,每次只能搬动一个盘子,搬动过程中可以借助任何一根柱子,但必须满足大盘在下,小盘在上。如何搬运盘子呢?
可以说,解决汉诺塔问题最好的算法就是递归,教材上也给出了打印搬运步骤的示例程序。可是,小马同学是个喜欢刨根问底的同学,她想知道,到底递归函数总共调用了多少次?递归程序出口的语句是否只执行1次?
输入
输入只有一组数据,在一行上输入圆盘的个数 n(保证满足n<=64)。
输出
在一行上输出两个整数,首先输出总共调用递归函数的次数,在空格后输出作为递归程序出口的语句的执行次数。
难度
较难
输入示例
2
输出示例
3 2

算法分析:

汉诺塔时典型的递归问题,愿意的将64个盘按照程序的方法挪动,估计人类都灭绝了,这里只是提供一种递归的思想,只考虑递归的结果,而并不去考虑递归的过程,只需要分三步。
第一步:将n-1个圆盘从A柱搬到C柱,借助于B柱
第二步:将第n个圆盘从A柱搬到B柱
第三步:将n-1个圆盘从C柱搬到B柱,借助于A柱

设置递归函数Hanoi(n,a,b,c),参数分别代表盘数,a,b,c柱ÿ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值