简单的汉诺塔,神奇的预言,竟然需要5849亿年???(52)

news2024/11/17 19:51:59

小朋友们好,大朋友们好!

我是猫妹,一名爱上Python编程的小学生。

和猫妹学Python,一起趣味学编程。

今日主题

汉诺塔

古印度大梵天传说

Python玩转汉诺塔

递归

汉诺塔

汉诺塔(Hanoi)是一个著名的益智游戏,也称为“大盘子游戏”或“回转木马”。

游戏的目标是将一组大小不同的盘子从一个柱子移动到另一个柱子上,但是每次只能移动一个盘子,并且大的盘子不可以放在小的盘子上面。

具体来说,有三根柱子,分别标有 A、B、C 的名称。

一开始,A 柱子上有 n 个盘子,编号为 1 到 n。

玩家需要将这些盘子从 A 柱子移动到 C 柱子上。

移动的方法是先将较小的盘子从 A 柱子移动到 B 柱子上,然后将较大的盘子从 A 柱子移动到 C 柱子上,最后将较小的盘子从 B 柱子移动到 C 柱子上。

这个游戏看起来很简单,但是实际上需要进行多次移动才能完成。因为每次只能移动一个盘子,所以在进行移动时需要考虑所有可能的情况,以避免出现错误。

汉诺塔是一种经典的益智游戏,可以锻炼人们的思维能力和逻辑推理能力。它也被广泛应用于教育和培训领域,作为一种有效的学习和教学工具。

古印度大梵天传说

相传印度主神大梵天在创造世界的同时,也造了三根金刚石柱子。

其中一根柱子上放着64个大小均不相同的圆盘。大梵天命令婆罗门将这64个圆盘按照从大到小的顺序移动到另一根柱子上,在移动的过程中始终要保持大盘在下,小盘子在上。

这其实是一种时间的象征,因为按照这个规则,将64个圆盘移动到另一个圆柱上,在时间上来说几乎是不可能的,需要的时间可能比宇宙诞生的时间还要长,具体为什么?一会你就明白了。

Python玩转汉诺塔

移动策略:

1.将(n-1)阶从A移动到B。

2.将n阶从A移动到C。

3.将(n-1)阶从B移动到C。

Python代码实现:

5849亿年

64阶需要移动次数为2**64-1=18446744073709551615

假设一秒移动一次,那么需要584942417355.072年。

大概需要5849亿年。

宇宙也不过才100多亿年。

假设从那时候开始玩,离完成还需要很多很多年,估计玩到人类灭绝还玩不完。

递归

在Python中,递归是一种函数调用自身的技术。当一个函数在其定义中调用自身时,就称为递归函数。

递归通常用于解决可以被分解为相同问题的子问题的问题。

例如,计算阶乘就是一个递归的例子。

当我们计算n的阶乘时,我们可以将其表示为1 * n!,其中n!是n的阶乘。

当我们计算4的阶乘时,我们可以写成1 * 4! = 1 * 24 = 24。

这是因为,当我们计算3的阶乘时,我们可以将其表示为3 * 2 * 1 = 6,然后将6乘以3得到18,这就是3的阶乘。

同样地,当我们计算2的阶乘时,我们可以将其表示为2 * 1 = 2,这就是2的阶乘。

因此,当我们计算4的阶乘时,我们可以写成4! = 4 * 3 * 2 * 1 = 24。

在Python中,递归函数需要满足一些条件才能正常工作。

首先,递归函数必须有一个结束条件,否则它将无限循环下去。

其次,递归函数必须明确处理所有可能的分支情况,否则它可能会出现错误或崩溃。

最后,递归函数必须能够正确地返回结果,否则它将无法达到其预期的目的。

总之,递归是一种强大的技术,可以在许多不同的应用程序中使用。

它可以帮助我们解决复杂的问题,并使代码更加简洁和易于理解。

需要注意的是,当n很大时,递归调用可能会导致栈溢出错误。

好了,我们今天就学到这里吧!

如果遇到什么问题,咱们多多交流,共同解决。

我是猫妹,咱们下次见!

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

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

相关文章

规则引擎架构-基于aviator

目录 aviator使用场景ASM 字节码操控框架aviator 表达式例子debug表达式类生成过程b-ca生成的class文件 aviator使用场景 github地址:aviator 使用场景: 规则判断及规则引擎公式计算动态脚本控制集合数据 ELT 等 …… ASM 字节码操控框架 asm实现&a…

【Dubbo】Dubbo架构的演进过程分析

📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于…

Go并发编程 Goroutine、Channel、Select、Mutex锁、sync、Atomic等

本文所有实例代码运行go版本:go version go1.18.10 windows/amd64 1 并发编程介绍 1.1 串行、并发、并行 串行:所有任务一件一件做,按照事先的顺序依次执行,没有被执行到的任务只能等待。最终执行完的时间等于各个子任务之和。…

效率神器!神级ChatGPT浏览器插件分享

大家好,我是卷了又没卷,薛定谔的卷的AI算法工程师「陈城南」~ 担任某大厂的算法工程师,带来最新的前沿AI知识和工具,欢迎大家交流~,后续我还会分享更多 AI 有趣工具和实用玩法,包括AI相关技术、ChatGPT、AI…

初识SpringBoot -- SpringBoot入门保姆级教程(一)

文章目录 前言一、初识SpringBoot1.SpringBoot简介2.用编译器IDEA创建SpringBoot项目3.在官网创建SpringBoot项目4.SpringBoot项目快速启动(前后端分离基本能力)5.了解SpringBoot起步依赖和启动类 总结 前言 为了巩固所学的知识,作者尝试着开…

RocketMQ消息消费

RocketMQ消息消费示例代码: public static void main(String[] args) throws InterruptedException, MQClientException {DefaultMQPushConsumer consumer new DefaultMQPushConsumer("please_rename_unique_group_name_4");consumer.setNamesrvAddr(&qu…

C++ 学习 ::【基础篇:15】:C++ 类的基本成员函数:析构顺序问题(全局/静态/局部量) 及 类类型(自定义类型)与析构函数

本系列 C 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C的三大特性等&#…

Nginx配置块location及rewrite详解(遗憾)

文章目录 一、location配置块详解1.location 大致分为三类2.location 常用的匹配规则3.location 匹配的优先级4.location 匹配流程5.location 的实际使用(1)直接匹配网站根目录首页(2)处理静态文件请求(3)通…

函数式接口相关知识点

这里写目录标题 函数式接口简介以及注意点函数式接口作为方法的参数函数式接口作为方法参数常用的函数式接口Supplier简介具体代码操作 Consumer简介具体代码演示演示1演示2 Predicate接口简介以及接口中的方法text和negate方法and和or方法Function方法简介具体操作1具体操作2 …

SQL语句之DDL语言

说明:DDL(Data Definition Language,数据定义语言),用来定义数据库对象(数据库、表),包括了数据库和表的创建、查询、使用和删除操作。 一、数据库操作 新安装的数据库,默认有以下四个数据库&…

计算机网络-数据链路层

概念 结点:主机、路由器 链路:结点间物理通道 数据链路:结点间逻辑通道,控制数据传输协议的硬件和软件加到链路上构成数据链路 帧:链路层的协议数据单元,封装网络层数据报 数据链路层负责通过一条链路从一…

银行转账问题(死锁)

本文主要讲述死锁的一个经典案例—银行转账问题,并对该问题进行定位、修复。 1. 问题说明 当账户A对账户B进行转账时, 首先需要获取到两把锁:账户A和账户B的锁。获取两把锁成功,且余额大于0,则扣除转出人的余额&…

我记不住的那些C语言的struct知识

背景: 最近在重学C语言,目的是为了能看懂操作系统的底层代码,也为后续使用C语言开发一个类似redis数据库的中间件做准备,于是又重新踏上了学习C语言的道路,早在上学期间就学习过C语言,但是很久都不用了&…

ssm学习-spring01

Spring_day01 今日目标 掌握Spring相关概念完成IOC/DI的入门案例编写掌握IOC的相关配置与使用掌握DI的相关配置与使用1,课程介绍 对于一门新技术,我们需要从为什么要学、学什么以及怎么学这三个方向入手来学习。那对于Spring来说: 1.1 为什么要学? 从使用和占有率看 Spri…

使用 ChatGPT API 构建系统(一):分类

今天我学习了DeepLearning.AI的 Building Systems with the ChatGPT API 的在线课程,我想和大家一起分享一下该门课程的一些主要内容。 下面是我们通过Openai API来访问ChatGPT模型的主要代码: import openai#您的openai的api key openai.api_key YOUR…

chatgpt赋能python:Python删除节点:从入门到实践

Python删除节点:从入门到实践 在任何编程语言中,删除节点都是一个极为常见的操作。在Python中,它同样非常重要,因为我们通常会使用Python处理各种数据结构,诸如树、链表等等。但是,删除节点并不总是一件容…

C++类和对象 -- 知识点补充

补充 const成员函数static成员友元内部类匿名对象拷贝对象时的一些编译器优化 const成员函数 将const修饰的成员函数称为const成员函数,const修饰类成员函数,实际是修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的成员进行修改。…

javaWeb ssh自习室管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh自习室管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,…

预报名通道已开启,2023第11届国际生物发酵展,8月4-6日上海见!

新机遇、新挑战、新发展 同期展会:酵素产品与益生产品展 制药机械与包装技术展 生化仪器及实验室设备展 合成生物技术与生物制造展 展会时间: 2023年8月4日 9:00-17:00 2023年8月5日 9:00-17:00 2023年8月6日 9:00-15:00 展会地点&#xff1a…

【数据结构】栈和队列选择题和面试编程题

目录 一、选择题 二、栈和队列的面试题 1、括号匹配问题 1.1 题目说明 1.2 题目解析 2、用队列实现栈 2.1 题目说明 2.2 题目解析 3、用栈实现队列 3.1 题目说明 3.2 题目解析 一、选择题 1、若进栈序列为 1,2,3,4 ,进栈过程中可以出栈,则下列不可能的…