汉诺塔递归思路C#

本文介绍了使用C#实现汉诺塔问题的递归思路。通过将问题分解为更小的部分,先移动N-1个盘子到中间柱,然后移动最大盘子到目标柱,最后再将剩余的N-1个盘子从中间柱移动到目标柱。通过递归调用hanoi函数实现了这一过程,并展示了核心代码实现。
摘要由CSDN通过智能技术生成

 汉诺塔
3个柱子和3个大小不同的盘子构成
规则:自始至终大盘子必须保证在小盘子之下
每次只能移动一个盘子

递归思想在于把问题简单化

我们假设只有两个盘子

 有了这个思想

我们可以假设有N个盘子

最大的为1个  剩下的N-1为一个

设A    B     C三个柱

A为起始柱    C为目标柱

要将A上的所有盘子移到C

首先得先将N-1个盘子移动到B

这时就牵扯到N-1个盘子的移动  这时目标柱就为B 辅助柱为C

我们可以得出

hanoi(int n,char start,char spt ,char target)

{

hanoi(n-1,start,target,spt)

}

移动完成N-1个盘子后我们完成后续动作将最大的盘子移动到C

接下来我们要将第N-1个盘子移动到C则需要把N-2个盘子移动到A柱

此时目标柱子为C   辅助柱为A

则扩展函数

{

hanoi(n-1,start,target,spt)

hanoi(n-1,spt,start,target)

}

当目标柱重新为C时      该函数已经达到我们的预期
为了方便观察现象加入元素i记录动作

#include <stdio.h>

void hanoi(int n,char start,char smb, char target)

{

    static i=1;

   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值