汉罗塔的一般解决方法是什么_汉诺塔最快的方法

汉罗塔的一般解决方法是什么_汉诺塔最快的方法这里主要是汉罗塔的递归求解n个盘子的总步数,和递归每一步盘子的步骤。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

 汉罗塔的一般解法

                   一般来说,汉罗塔大多数人都是玩过了的。并且有一个很容易得到的规律,那就是先要将前(n – 1)项移动到过渡桩上面去,然后将最后一盘放在最终放的位置,然后再将(n – 1) 个盘子移动到最终位子。那么就完成了汉罗塔。

                      
不管是多少个盘子,只要他的柱子只有三个,那么解法都是这个模式,所以很容易得到递归求解,如果是求总的移动次数,那么递归写法应该是如下:
 

#include <stdio.h>
int f(int n) // n是盘子数
{
	if(1 == n)
	{
		return 1; //很容易得到 一个盘子当然只需要移动一次就得到结果
	}
	else
	{
		return f(n - 1)*2 + 1; // 简化版
		//return f(n - 1) + 1 + f(n - 1); 
		// 这上面的式子的意思正如我上面所说 ,先将前n - 1 个盘子移动到过渡桩上面去,然后移动最后一个盘子,再移动前 n - 1 个盘子
		// 所以是 f(n - 1) 的移动次数 加上最后一个盘子移动的一次 再加上f(n - 1)个盘子移动的次数 得到总次数
	}
}
int main()
{
	int n;
	scanf("%d",&n); //盘子数
	printf("%d个盘子总共移动次数为: %d",n,f(n));
	return 0;
}
	以上就是求解n个盘子需要移动的次数
	而有时侯有的题目会考每次移动的盘子的步骤打印出来,那么就需要将上面的递归改变一下就可以得到每步的怎么移动的了
	如下:
	PS: 我就直接写递归函数了 
	void f(int n, char begin,char end,char through)
	{
		if(1 == n)
		{
			printf("%c -> %c\n",begin,end);
		}
		else
		{
			f(n - 1,begin,through,end); //移动前n - 1 个盘子到过渡盘
			printf("%c -> %c\n",begin,end); // 将最后一个盘移动到最终柱子
			f(n - 1,through,end,begin); // 将 n - 1 个盘子移动到最终柱子
		}
	}
	如上就是每步盘子是如何移动的递归程序,只要明白了基本的移动方式,那么写出汉罗塔递归程序还是很好写的。
 
 

 

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

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

(0)
上一篇 2022年10月12日 下午8:00
下一篇 2022年10月12日 下午8:00


相关推荐

  • navicate 15 激活码【2021.8最新】[通俗易懂]

    (navicate 15 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsa…

    2022年3月26日
    244
  • PhpStorm激活成功教程版及使用教程

    PhpStorm激活成功教程版及使用教程本文引自网络,仅供本人学习使用之用,感谢网友的分享PhpStormPhpStorm 是JetBrains公司开发的一款商业的PHP集成开发工具,旨在提高用户效率,可深刻理解用户的

    2022年8月2日
    14
  • Idea激活码永久有效Idea2017.3.7激活码教程-持续更新,一步到位

    Idea激活码永久有效Idea2017.3.7激活码教程-持续更新,一步到位Idea激活码永久有效2017.3.7激活码教程-Windows版永久激活-持续更新,Idea激活码2017.3.7成功激活

    2022年6月17日
    37
  • SpringCloud系列之eurake集群

    SpringCloud系列之eurake集群1 场景还原通俗的讲 eurake 在微服务架构中最大的功能就是将项目划分的微服务收集起来 供服务间相互调用 如果 eurake 服务挂了 可想而知 整个项目的服务调用势必是过眼云烟 今天笔者就 eurake 集群做个详解 仅供参考 2 实现方案 eurake 服务的搭建在上篇笔者已经介绍 链接教程 https blog csdn net zhangxing520 article

    2026年3月18日
    3
  • ManualResetEvent浅谈

    ManualResetEvent浅谈C#中ManualResetEvent的开关作用贴代码usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;usingSystem.Threading.Tasks;namespacetest01{clas…

    2022年7月18日
    28
  • jsonp跨域原理简单总结_jsonp的工作原理

    jsonp跨域原理简单总结_jsonp的工作原理JavaScript是一种在Web开发中经常使用的前端动态脚本技术。在JavaScript中,有一个很重要的安全性限制,被称为“Same-OriginPolicy”(同源策略)。这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容。JavaScript这个安全策略在进行多iframe或多窗口编程、以及Ajax

    2025年6月10日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号