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

汉罗塔的一般解决方法是什么_汉诺塔最快的方法这里主要是汉罗塔的递归求解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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 环保产品有哪些项目_项目环境分析

    环保产品有哪些项目_项目环境分析一、开发环境:开发环境是程序猿们专门用于开发的服务器,配置可以比较随意,为了开发调试方便,一般打开全部错误报告。通俗的讲,项目尚且在编码阶段,我们的代码一般在开发环境中,不会在生产环境中,生产环境组成:操作系统,web服务器,语言环境。二、测试环境:一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。通常指项目测试,修改bug阶段。三、生产环境(pro):是指正式提供对外服务的,一般会关掉错误报告,打开错误日志。可以理解为包含所有的功能的环境,任何项目所使用

    2022年9月29日
    0
  • windows定时关机命令 取消定时关机命令 查看DNS缓存命令 清除DNS缓存命令「建议收藏」

    windows定时关机命令 取消定时关机命令 查看DNS缓存命令 清除DNS缓存命令「建议收藏」shutdown-s-t以秒为单位的时间值注意这里的时间是以秒为单位哦例如:shutdown-s-t3600这是一个钟之后自动关机如果要取消自动关机,则输入:shutdown-a即可。另外再记个我觉得的常用命令吧ipconfig/displaydns这个显示是电脑上的dns缓存的全部信息ipconfig/flushdns这个是清除dns缓存的命令。…

    2022年5月14日
    57
  • 局域网广域网城域网的英文_城域网是内网还是外网

    局域网广域网城域网的英文_城域网是内网还是外网局域网定义:局域网是将小区域内的各种通信设备互连在一起的通信网络目前常见的局域网类型包括:以太网(Ethernet)、光纤分布式数据接口(FDDI)、异步传输模式(ATM)、令牌环网(TokenRing)、交换网Switching等,它们在拓朴结构、传输介质、传输速率、数据格式等多方面都有许多不同。局域网的典型特性:高速据率(0.1M~100Mbps),短距离(0.1km~2

    2022年10月19日
    0
  • android之知识点小结二[通俗易懂]

    SharedPreferences的使用:在这里也是偏向于使用android自带的SharedPreferences管理机制,简要说明使用流程,备忘:首先在主activity里面初始化SharedPreferences,SharedPreferences prefs=null;…@Override public void onCreate(Bundle savedIns

    2022年3月10日
    42
  • 4月20日

    4月20日

    2021年9月27日
    47
  • mysql 往表中某个字段的字符串后追加字符串[通俗易懂]

    mysql 往表中某个字段的字符串后追加字符串

    2022年2月20日
    38

发表回复

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

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