前言:
汉诺塔大家都不陌生吧,在猩球崛起这个电影里,人们通过凯撒玩汉诺塔知道了它的智商增高了,这个益智小游戏的规则就是:
汉诺塔(Tower of Hanoi),又称河内塔。是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
动画演示就是这样:
对于这个小游戏,其实用到了递归的思想。
移动两层汉诺塔的步骤:
这样的话,我们推算n层汉诺塔的实现。
我们需要做的步骤便是:
用代码来演示一下:
设计函数hanoi:
hanoi(unsigned int n,char a,char b,char c);
其中n代表汉诺塔层数,用a,b,c来演示三个柱子间盘子的移动。
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void move(char a, char b)
{
printf("%c -> %c\n", a,b); //打印盘子需要移动的方向
}
void hanoti(unsigned int n,char a,char b,char c)
{
if (n == 1)
move(a, c);
else
{
hanoti(n - 1, a, c, b);
move(a, c);
hanoti(n - 1, b, a, c);
}
}
int main()
{
unsigned int n = 0;
scanf("%d", &n); //输入几层汉诺塔
hanoti(n,'A','B','C');
return 0;
}
那演示一下3个盘子的移动验证函数正确性:
结果正确。
总结:
递归是函数解决问题的一种重要方式,掌握和熟练应用递归函数可以解决复杂问题。
②如果两个选票的ZXID相同的话,那么就会比较myid,默认为myid较大的服务实例作为Leader根据这个规则,我们来看看当server1收到server2的选票后,比较的流程是怎样的,首先两个选票都是第一轮投票选举,所以zxid都是0,接着就要开始比较myid了,server1的myid是1,而server2的myid是2,大于自身的myid,那么server2就应该是Leader,因此server1会更新自己的选票为(2,0),然后下次发送的时候就是发送新的选票信息出去4.统计每一次选票每一次投
RoutineControl”,例程控制该服务执行指定的步骤操作并获取相关结果,相比0x2F服务,具有较大的灵活性,可用于较为复杂类型的控制。一般应用包括清除内存(多数用在更新ECU软件),重置或学习自适应数据,运行自检,方向盘角度零点标定等。0x31服务在实际运用中要比0x2F复杂些,但那又怎样,通过本章讲解是否对该服务熟悉那么一勾勾呢?下一章 DTC控制 0x85服务见!->返回总目录
如下办法,建立一个js文件:代码如下:module.exports = { "env": { "browser": true, "es6": true }, "extends": [ "eslint:recommended", "plugin:vue/essential" ], "glob...
介绍在查看Android API源码时,Android.jar内部有大量@hide注解的代码,无论是用Eclipse还是Android Studio都会隐藏有@hide注解的代码!因此我们查看API源码会发现很多类找不到错误,如PhoneWindow,ActivityThread等都没有找到,我早期看API时就很恼火!...
为什么80%的码农都做不了架构师?>>> ...
目录MISC1.签到题:EBCDIC编码1.1 方法1:010Editor工具转换1.2 方法2:python转换2.colorful code:RGB隐写+Piet2.1 前期分析2.2 RGB转图片2.3 Piet解码3.PicPic:你想成为CV大师嘛3.1 前期分析3.2 challenge1:傅里叶反变化原理3.3 challenge2:傅里叶反变化原理3.4 challenge3:傅里叶反变化原理MISC1.签到题:EBCDIC编.
2 月 3 日,B站「Ele实验室」博主用 Java 写了一个仿真程序,并录制了一个视频,解释了目前为什么还没到随便外出的时刻了。计算机仿真程序告诉你为什么现在还没到出门的时候!!!相关 Java 源码,他已放在 GitHub :https://github.com/KikiLetGo/VirusBroadcast趁着这个机会在家充电.....700...
Ubuntu 20.04 更换国内源source1. 备份原sources.list2. 编辑sources.list3. 重启生效1. 备份原sources.listsudo cp /etc/apt/sources.list /etc/apt/sources.list.bak2. 编辑sources.listsudo gedit /etc/apt/sources.list 修改为如下内容:deb http://mirrors.aliyun.com/ubuntu/ focal main
知识列表1. 网络配置Ubuntu网络配置http://einverne.github.io/post/2019/08/ubuntu-linux-mint-network-configuration.htmlhttps://wiki.ubuntu.org.cn/UbuntuManual:%E7%BD%91%E7%BB%9C%E8%AE%BE%E7%BD%AEhttps://www.howtoforge.com/linux-basics-set-a-static-ip-on-ubuntu..
编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)。下面介绍一下GCC、Clang、Visual S...
String index out of range: -1出现这个原因是因为系统在计算字符长度的时候不能小于0。在使用substring()时很容易出现下标越界,从而导致这种错误。当时我就是用fileName.substring(fileName.lastIndexOf("."), fileName.length())来截取图片后缀名的,而我从前端传到后端的图片是没有后缀名的,导致越界。...
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <!-- datetimepicker的相关js、css链接 --> <!-- <link href="https://cdn.bootcss.com/datepicker/0.5.4/datepicker.css.