iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >带你理解C语言中的汉诺塔公式
  • 782
分享到

带你理解C语言中的汉诺塔公式

2024-04-02 19:04:59 782人浏览 安东尼
摘要

目录汉诺塔公式汉诺塔问题在数学层面的公式:C语言递归公式两层汉诺塔三层汉诺塔总结汉诺塔公式 汉诺塔问题在数学层面的公式: 不用说,你看到这个公式一定一脸懵逼,我现在来讲解这个公式的

汉诺塔公式

汉诺塔问题在数学层面的公式:

不用说,你看到这个公式一定一脸懵逼,我现在来讲解这个公式的作用。

先来回想一下大象放冰箱要几步,三步吧,打开冰箱,放进去,关上门就行了,我们先不要去思考一些细碎的步骤,将一个复杂的问题先简单化,再慢慢去分析。

那汉诺塔问题也是同样的简单三步:(假设有n个盘子)

一、把最大的盘子留在A柱,然后将其他的盘子全放在B柱。

二、把最大的盘子放到C柱。

三、然后将B柱上的所有盘子放到C柱。

这就是汉诺塔的流程,汉诺塔的精髓就是上面三句话。

n层汉诺塔有(2^n-1)次移动,来将盘子全部从A盘到C盘.

C语言递归公式

相应我们可以写出对应的C语言递归公式:(n就是盘子的个数,xyz就是柱子的名字)

相信你肯定有很多疑问,我们现在先来举几个例子再解释问题吧。

 一个盘子就不说了,因为最大的盘子就是他,所以他直接就去C盘了。

两层汉诺塔

共三步:把最大盘上面的全部放到B,然后最大盘去C,再把剩余的盘全部放到C就行了。

这是两个盘,共移动三次就移动完了,那三个盘呢?

三层汉诺塔

 把全部过程堪称一个整体,最大盘上面的所有盘全部看成一个整体,我们也只用执行三个步骤,我们要利用把大事化小的观点,不要一上来就思考具体是怎么移动的,这样看不清问题的本质。

我们再来具体分析三步具体要怎么移动.

第一步中,我们要移动三次,分别是A->C、是A->B、C->B这就是一大次完整的移动,在这一步中,我们套用了上一次的汉诺塔公式进行使用,这就是汉诺塔的难点,接下来我给大家看个图,希望大家能理解,(n是层数,X,Y,Z则是函数参数)

 汉诺塔的内部其实就像一个金字塔一样,其实每一次调用自己,就是按照上面所说精髓的公式调用自己,让自己的参数发生了变化。我希望大家能够自己去照着画一下流程,

第二步:将A到C,这就是将上图的第二步那写上第四次移动:A->C。

第三步,将B柱上的全部盘子借助A放到C

第七步完成后就会发现没有要执行的语句了,汉诺塔函数就结束返回到main函数了,自此求解汉诺塔函数的步骤就完成了。

好的,这样,我们移动三层汉诺塔的过程的就完成了,三次汉诺塔完成就算是解决了这个问题,因为即使盘子再多也就是一样的公式套用而已,明白两层和三层汉诺塔的运行原理就可以了,再多层的塔也是相同的流程。不难发现,递归就是让数学公式在C语言中体现了出来,让问题变的十分”简单“。

剩下就是了程序的主函数部分了,这个问题的主函数就很简单,主函数只用传来盘子的数量和三个柱子的名字就行了;代码如下

#include <stdio.h>
void change (char x,char y)     //打印盘子移动轨迹的函数
{
    printf("%c->%c\n", x, y);
}
void f(n, x, y, z)              //汉诺塔函数
{
    if (n == 1)
    {
        change(x, z);
    }
    else
    {
        f(n - 1, x, z, y);      //公式一:将A柱最大盘外的盘子借助C柱移到B柱
            change(x, z);       //公式二:将A上最大盘移动到C柱
        f(n - 1, y, x, z);      //公式三:将B柱上的盘借助A全部放到C柱
    }
}
int main()
{
    int m;
    scanf("%d", &m);
    f(m, 'A', 'B', 'C');
}

总结

到此这篇关于带你理解C语言中的汉诺塔公式的文章就介绍到这了,更多相关C语言汉诺塔公式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 带你理解C语言中的汉诺塔公式

本文链接: https://www.lsjlt.com/news/163161.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 带你理解C语言中的汉诺塔公式
    目录汉诺塔公式汉诺塔问题在数学层面的公式:C语言递归公式两层汉诺塔三层汉诺塔总结汉诺塔公式 汉诺塔问题在数学层面的公式: 不用说,你看到这个公式一定一脸懵逼,我现在来讲解这个公式的...
    99+
    2024-04-02
  • C语言中的汉诺塔公式是什么
    这篇文章主要为大家展示了“C语言中的汉诺塔公式是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中的汉诺塔公式是什么”这篇文章吧。汉诺塔公式汉诺塔问题在数学层面的公式:不用说,你看到这个...
    99+
    2023-06-28
  • C语言实现汉诺塔(图文详解)
    目录思路:当n=1时:当n=2时:当n=3时:当n=4时:见代码运行截图总结汉诺塔的游戏规则: 有三根金刚石柱子A、B、C,在A柱子上从下往上按照大小依次减小的顺序摞着64片黄金环。...
    99+
    2024-04-02
  • c语言汉诺塔问题怎么解决
    解决汉诺塔问题的常见方法是使用递归。以下是使用递归解决C语言汉诺塔问题的示例代码:```c#include void hanoi(i...
    99+
    2023-10-07
    c语言
  • C语言递归思想实现汉诺塔详解
    目录1.递归思想简介2.汉诺塔问题3.汉诺塔递归的c语言实现总结1.递归思想简介 在c语言中,程序调用自身的编程技巧称为递归( recursion)。 递归的定义看上去似乎很抽象,使...
    99+
    2024-04-02
  • C语言递归函数与汉诺塔问题简明理解
    目录递归函数Hanio(汉诺塔)问题递归函数 直接或者间接调用函数本身。“自己调用自己” 什么情况下面可以使用递归呢 解决一个问题时,解决思路化成与问题本身类...
    99+
    2024-04-02
  • C语言超详细讲解递归算法汉诺塔
    目录题目描述画图分析思路总结代码实现总结题目描述 汉诺塔问题起源于一个传说 汉诺塔又被称为河内塔,传说,在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。 印度教...
    99+
    2024-04-02
  • C语言运用函数的递归实现汉诺塔
    目录1、汉诺塔是如何实现的2、汉诺塔问题画图详解3、汉诺塔问题代码解释总结1、汉诺塔是如何实现的 下面是有三个盘子的示例: 从左到右一次是 A柱 B柱 C柱 A柱:起始位置 B柱:...
    99+
    2024-04-02
  • C语言递归函数与汉诺塔问题怎么解决
    今天小编给大家分享一下C语言递归函数与汉诺塔问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。递归函数直接或者间接调...
    99+
    2023-07-02
  • C语言怎么运用函数的递归实现汉诺塔
    这篇文章主要讲解了“C语言怎么运用函数的递归实现汉诺塔”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言怎么运用函数的递归实现汉诺塔”吧!1、汉诺塔是如何实现的下面是有三个盘子的示例:从左...
    99+
    2023-07-02
  • 一篇文章带你了解C语言内存对齐公式
    目录一、前言二、公式2.1、例子一2.2、例子二2.3、例子三总结一、前言 每一个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。GCC中默认#program pack...
    99+
    2024-04-02
  • C语言进阶几分钟带你理解大小端存储模式
    目录正片开始共用体原理引申一下字节顺序大小端存储共用体判断大小端正片开始 C语言中数据类型的存储是较为严谨的,一块空间只能存储一种数据类型,要知道内存这个东西,在早期可是非常珍贵的。...
    99+
    2024-04-02
  • 带你了解C语言的数据的存储
    目录C语言当中使用的数据类型使用的类型整型类浮点类型内存当中的存储原码、反码、补码大小端什么是大小端浮点数的存储浮点数的存储浮点数的存储规则指数 E 从内存当中取出总结C语言当中使用...
    99+
    2024-04-02
  • 一文带你深入理解Go语言中的sync.Cond
    目录sync.Cond 是什么适用场景sync.Cond 的基本用法NewCond 创建实例Wait 等待条件满足Signal 通知一个等待的 goroutineBroadcast ...
    99+
    2023-01-31
    Go语言 sync.Cond使用 Go语言 sync.Cond Go sync.Cond
  • 一文带你学会C语言中的qsort函数
    目录铺垫知识使用qsort函数进行整型数组的排序使用qsort函数进行浮点型数组的排序使用qsort函数进行结构体数组的排序铺垫知识 qsort函数 参数类型  ...
    99+
    2022-12-21
    C语言 qsort函数 C语言 qsort
  • 一篇文章带你了解C语言中volatile关键字
    目录C语言中volatile关键字总结C语言中volatile关键字 volatile关键字是C语言中非常冷门的关键字,因为用到这个关键字的场景并不多。 当不用这个关键字的时候,CP...
    99+
    2024-04-02
  • 一篇文章带你了解C语言--数据的储存
    目录前言数据类型介绍类型的基本归类整形在内存中的存储原码、反码、补码大小端介绍浮点型在内存中的存储前言 前面我们学习了C语言的一些基本知识和基础的语法,想必大家对C语言都有了自己的认...
    99+
    2024-04-02
  • 一篇文章带你了解C语言的选择结构
    目录一、if-else语句1.单选择 2.双选择3.多选择二.switch语句总结一、if-else语句 1.单选择 单选择通过if语句就可以实现,if语句的语法及执行流程...
    99+
    2024-04-02
  • 一篇文章带你了解论C语言中算法的重要性
    目录一、问题一(打印阶乘)问题描述:问题分析:解决方案:1.让我们检查一下结果,发现问题很有可能是循环的时候没有循环本身2.这里要引入C++中STL库的一个知识点二、问题二(比较多项...
    99+
    2024-04-02
  • 一篇文章带你了解C语言的文件操作
    目录为什么使用文件什么是文件程序文件数据文件文件名文件的打开和关闭文件指针fopen和fclose函数文件的顺序读写总结为什么使用文件 我们在想既然是通讯录就应该把信息记录下来,只有...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作