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

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


相关推荐

  • 0xffffffff颜色值是怎么读的「建议收藏」

    0xffffffff颜色值是怎么读的「建议收藏」平常看到的大多数是十六进制的,#f5f5f5。但是在自定义控件的时候,有些地方使用了像0xffffffff,这些设置颜色,在百度给的也不太明确,后来查找发现,原来是在C语言中十六进制数必需以0x开头,以0x开头的数即表明它是一个十六进制的数,真正的数是0x后的值,所以,这种颜色值,0x不用管,接着的两位数ff是表示透明度,再接着的六位数就是平常看的#ffffff了。

    2022年5月17日
    47
  • 基于单片机的水位检测系统_51单片机温度传感器程序

    基于单片机的水位检测系统_51单片机温度传感器程序开发前的准备:LCD1602一块51单片机开发板一块(这里我用的是普中的板子)霍尔水流量传感器一块(红色接5V黑色接GND黄色是数据传接口)霍尔传感器流量经验公式:Q=(F+3)/8.1Q表示流量…

    2022年9月27日
    2
  • PDAF原理简介_pfc电路工作原理图

    PDAF原理简介_pfc电路工作原理图PDAF原理原理及分类原理:是在感光芯片上预留出一些规律性对称的遮蔽像素点,专门用来进行相位检测,通过像素之间的距离及变化来决定对焦的偏移量即相位差(PD值)从而实现快速对焦。SP(shieledpixel)屏蔽掉像素一般的感光区域(黑色部分),值获得一半信号。需要另外的像素屏蔽掉另一半信号,得到完整的相位差信息。SP越多,对焦越快,但信号损失越严重,目前SP密度控制在1%~3%。屏蔽掉像素一般的感光区域(黑色部分),值获得一半信号。需要另外的像素屏蔽掉另一半信号,得到完整的相位差信息。S

    2022年9月7日
    2
  • android在代码中四种设置控件背景颜色的方法(包含RGB)「建议收藏」

    android在代码中四种设置控件背景颜色的方法(包含RGB)

    2022年2月7日
    41
  • 二叉树前序遍历 迭代_二叉树的前序中序后序遍历算法

    二叉树前序遍历 迭代_二叉树的前序中序后序遍历算法二叉树的前序遍历对于一颗二叉树,当遍历它的时候使用递归总是轻而易举的。这是二叉树前序遍历-使用递归publicvoidpreorderTraversal(TreeNoderoot){if(root==null)return;System.out.print(root.data+””);preorde…

    2022年9月10日
    4
  • com组件是什么东西_如何注册com组件

    com组件是什么东西_如何注册com组件COM编程——GUID和注册表2014年1月13日作者:果冻想1,129views暂无评论什么是GUID?做COM开发,就不得不去了解IID了,IID作为每一个接口的唯一标识符;我之前也有像下面这样定义一个IID://{2A06BBB3-667C-4D51-A8AD-F3CFDD7EF682}staticconstIIDIID_IX={0x

    2025年7月12日
    2

发表回复

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

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