C语言函数递归实现汉诺塔问题

 汉诺塔问题的大概

 汉诺塔问题如图三个柱子,利用B将A上面的盘子移到C上面,但是一次只能移动一个盘子并且大的盘子不可以在小的盘子上面。

 当只有三个盘子的时候,就像图片一样移动,当盘子多了起来我们就很难分得清逻辑了。

这个时候我们就可以用递归思维来解决这个问题,递归的要点就是大事化小,小事化了。

递归实现思路

 第一步:

 

 

第二步:

 

第三步:

 

 大家可能会很疑惑,不是说一次只能移动一个吗,其实递归思想就是这样,我们要把他简化,把上述的主体就看做一个盘子,这就是我们写代码的基本思路了,接下来我们就写代码。

代码实现

#include<stdio.h>
//递归实现汉诺塔的交换
//如果只有三个片 且 a b c 中 b 是辅助的:
// 1:a -> c 2:a -> b  3:c -> b  4: a -> c  5:  b -> a   6: b -> c   7: a -> cvoid hanno(int n, char x, char y, char z)
{if (n == 1){printf("把第%d个片从%c放到%c\n", n, x, z);}else{hanno(n - 1, x, z, y);printf("把第%d个片从%c放到%c\n", n, x, z);hanno(n - 1, y, x, z);}
}int main()
{int n = 0;char one = 'A';char two = 'B';char three = 'C';printf("请输入你想要多少个汉诺塔:");scanf("%d", &n);printf("下面就是步骤:\n");hanno(n, one, two, three);
}

代码理解:

 要理解这个问题和代码,你必须对于递归要有一定认识才行,如果不知道,可以看我以往的文章试着理解一下:点这里

 代码验证:

这个代码到底行不行,还是需要通过验证。我们验证的话可以用三个盘子来试试:

三个盘子的话,我们的步骤为:

1: a -> c   2:a -> b  3:c -> b  4: a -> c  5:  b -> a   6: b -> c   7: a -> c

一共七步。

验证下来我们的代码没错,如果还没有懂得代码什么逻辑的,可以一步一步按照逻辑自己看着代码验证一遍,这样就大概率懂得了,类似这样:

当然不一定大家都像我这样理解,只要大家可以懂得方法,自己理解了逻辑就说明都知道了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL之查询性能优化(四)

查询性能优化 MySQL客户端/服务器通信协议 一般来说&#xff0c;不需要去理解MySQL通信协议的内部实现细节&#xff0c;只需要大致理解通信协议是如何工作的。MySQL客户端和服务器之间的通信协议是"半双工"的&#xff0c;这意味着&#xff0c;在任何一个时刻&#…

【退役之重学】为什么要加入多级缓存

一、为什么 加入多级缓存是为了提高数据访问的效率和性能 二、怎么做 在多级访问系统中&#xff0c;数据首先会被存储在速度最快的 L1 缓存中&#xff0c;如果数据在 L1 缓存中未命中&#xff0c;则会继续在 L2 缓存 和 L3 缓存中查找&#xff0c;如果在所有缓存中都未命中&…

java —— 打印流

打印流分字符打印流 PrintWriter 和字节打印流 PrintStream&#xff0c;两者用法基本一样&#xff0c;但字符打印流明显应用范围更广一些。 一、打印至控制台 public static void main(String[] args) {String str"hello";PrintWriter pwnew PrintWriter(System.ou…

神经网络与深度学习——第15章 序列生成模型

本文讨论的内容参考自《神经网络与深度学习》https://nndl.github.io/ 第15章 序列生成模型&#xff0c;习题还没做先存在这里。 序列生成模型 序列概率模型 序列生成 N元统计模型 深度序列模型 模型结构 嵌入层 特征层 输出层 参数学习 评价方法 困惑度 BLEU算法 ROUGE算法 序…

redhat8安装cadence遇到的问题

问题1 virtuoso: ERROR: The OA2.2 library directory (/cadence/IC618/share/oa/lib/linux_rhel50_gcc48x_64/opt) does not seem to exist. virtuoso: INFO: You have OA_UNSUPPORTED_PLAT set to "linux_rhel50_gcc48x" in your environment: virtuoso: …

@EnableAuthorizationServer授权服务注解源码分析

文章目录 学习参考EnableAuthorizationServerAuthorizationServerEndpointsConfigurationTokenKeyEndpointRegistrarendpoints&clientDetailsService&configurersAuthorizationEndpoint授权端点TokenEndpoint令牌端点 学习参考 Spring Security框架配置运行流程完整分…

【面试题-007】说一下JVM原理

JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09;是Java语言的一个核心概念&#xff0c;它允许Java代码在不同的操作系统上运行&#xff0c;而不需要为每个平台编写不同的代码。JVM是一种抽象的计算机&#xff0c;它实现了Java语言规范中的所有功能&…

Aethir: 破局算力瓶颈,构建AI时代去中心化云基础设施

科技的每一次飞跃都在重新塑造世界&#xff0c;而近年来&#xff0c;跨越式的技术革新再次引发了深刻的变革&#xff0c;那就是人工智能&#xff08;AI&#xff09;。 人工智能已然超越了此前的所有技术概念&#xff0c;成为了继互联网之后的下一个巨大浪潮。从自动驾驶汽车到…

每天复习一点小CTF知识(6.4)

NSSCTF/[FSCTF 2023]夜深人静的时候也会偷偷emo 直接爆破压缩包&#xff0c;先来数字 解压好&#xff0c;一个flag.mp3 mp3隐写&#xff0c;直接干 得一个txt文件直接开

宇泰485中继器光电隔离防雷 工业级RS485信号放大器 UT-2209正品

品牌&#xff1a;other/其他 型号&#xff1a;UT-2209 上市时间&#xff1a;2018-01-01 颜色分类&#xff1a;蓝色 信号延长器,工业级,高性能,RS-485光电隔离中继器,兼容RS-485标准,延长通信距离,即插即用. 性能特点: 内置光电隔离器及DC/DC隔离模块. 采用TVS瞬态电…

读书-《蛤蟆先生去看心理医生》

书名蛤蟆先生去看心理医生作者罗伯特戴博德状态阅读中简介该书借用《柳林风声》的故事主角蛤蟆先生&#xff0c;讲述了他接受心理咨询的故事。作者通过陷入抑郁的蛤蟆先生和心理咨询师苍鹭的互动&#xff0c;探索蛤蟆先生爱炫耀、自卑性格和抑郁情绪的来源&#xff0c;指出童年…

MicroSIP 使用笔记

下载 https://www.microsip.org/ 习惯下载 portable zip 日志 日志非常重要&#xff0c;对查问题有巨大帮助 编辑 microsip.ini&#xff0c; enableLog1 修改 listen 端口 编辑 microsip.ini&#xff0c;sourcePort5060 sip nat 编辑 sip 账号,"Allow IP Rewrite…

定积分求解举例

定积分是微积分中的一个重要概念&#xff0c;用于求解连续函数在某一区间上的面积或体积等问题。下面我将给出一个定积分求解的举例。 假设我们要求解函数 f(x)x2 在区间 [0,1] 上的定积分&#xff0c;即求解 ∫01​x2dx 求解步骤 1. 找出被积函数 f(x) 的原函数 F(x) 对于…

【Python】 如何在Python中使用小数步长值的`range()`函数?

在Python编程中&#xff0c;range()函数是一个非常常用的工具&#xff0c;它用于生成一个整数序列。然而&#xff0c;标准的range()函数只能接受整数作为步长值&#xff0c;这在某些情况下可能会限制其应用。幸运的是&#xff0c;Python提供了一些方法来实现使用小数步长的rang…

优思学院|六西格玛绿带与黑带知识体系的比较,哪个更适合你?

六西格玛作为一种广泛应用的质量管理方法&#xff0c;通过减少缺陷和变异来提高输出质量。为了实现这些目标&#xff0c;六西格玛采用数据驱动的DMAIC&#xff08;定义、测量、分析、改进、控制&#xff09;方法。在六西格玛的实施过程中&#xff0c;绿带和黑带是两个关键角色。…

【代码随想录】【算法训练营】【第28天】 [93]复原IP地址 [78]子集 [90]子集II

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 28&#xff0c;工作的周二~ 题目详情 [93] 复原 IP 地址 题目描述 93 复原 IP 地址 解题思路 前提&#xff1a;分割问题 思路&#xff1a;回溯算法&#xff0c;确定每次递归回溯的分割位置…

分布式文件系统-NFS

NFS 1. NFS工作原理 Linux中的网络文件系统NFS &#xff08;Network File System&#xff09;是一种分布式文件系统协议&#xff0c;它允许用户在网络上远程访问和操作文件&#xff0c;就好像这些文件存储在本地计算机上一样。NFS最初由Sun Microsystems在1980年代开发&#…

小短片创作-理论知识(五)

1、网格体绘制 1.UE5打开Megascan插件的材质混合器&#xff0c;创建混合材质&#xff0c;最多选择3个材质进行混合&#xff0c; 2.通过模式->网格体绘制&#xff0c;进入网格体绘制模式&#xff0c;通过select选择一个平面进行绘制&#xff0c;然后通过paint进行绘制&am…

关于线程池面试题,使用“豆包”训练答案

我提问&#xff1a; 问题描述 下面是一个有关线程池调度的面试真题&#xff0c;来自于疯狂创客圈社群&#xff1a; 一个线程池的核心线程数为10个&#xff0c;最大线程数为20个&#xff0c;阻塞队列的容量为30。现在提交45个 任务&#xff0c;每个任务的耗时为500毫秒。 请问&…

【Mac】Keyboard Maestro for Mac(键盘大师)软件介绍及安装教程

软件介绍 Keyboard Maestro for mac&#xff08;键盘大师&#xff09;是目前Mac OS平台上功能最为齐全的Mac键盘增强工具&#xff0c;它能将你的Keyboard作用发挥到极致&#xff0c;可以根据命令或计划自动执行简单或复杂的应用程序或网站&#xff0c;文本或图像。使用Keyboar…