前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >汉罗塔问题的递归实现「建议收藏」

汉罗塔问题的递归实现「建议收藏」

作者头像
全栈程序员站长
发布2022-11-04 11:28:15
2090
发布2022-11-04 11:28:15
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。 #include <iostream> using namespace std; void move(int m,char a,char b); void hanoi(int m,char one,char two,char three); int main(){ hanoi(4,’A’,’B’,’C’); return 0; } void move(int m,char a,char b){ cout<<m<<” from “<<a<<“—>”<<b<<endl; } //hanoi的函数说明,借助two这个柱子把盘子从one移动到three这根柱子上 void hanoi(int m,char one,char two,char three){ if(m==1){ move(m,one,three);//如果只有一个盘子,就直接从第1个位置移动到第3个 }else{ /* 如果需要移动的盘子m大于1个,思路是先把前m-1个盘子移动到中间的位置,然后再把第m个盘子移动到第三根柱子上 然后再借助第一根柱子把前m-1个盘子移动到第3根柱子上 */ hanoi(m-1,one,three,two); move(m,one,three); hanoi(m-1,two,one,three); }

}

汉罗塔问题的递归实现「建议收藏」
汉罗塔问题的递归实现「建议收藏」

其实递归的效率是非常低的,但是递归思路在解决某些问题的时候非常使用,主要体现在思路清晰,代码实现非常简单,困难是找到递归问题的结束点。

就拿汉罗塔问题来说,首先要移动第m个盘子,从A移动到C,必须先将前m-1个盘子从A移动到B,然后才能成功的把第m个盘子从A移动到C,第m个盘子成功的从A移动到C以后,剩下的有是一个m-1个盘子的汉罗塔问题,现在需求变成了需要把m-1个盘子从B借助A移动到C。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/182863.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档