我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python3实现汉诺塔问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python3实现汉诺塔问题

Python3实现汉诺塔问题

  • 一、思路
  • 二、Python3代码实现
  • 三、总结
  • 四、参考资料

总结归纳为以下3步:

  1. 把x上的n-1个盘子借助z,移动到y上
  2. 把x上最下面的盘子移动到z上
  3. 最后把y上的n-1个盘子借助x移动到,z上,大功告成
    递归出口:n=1时,直接从x移动到z上
# Python3递归实现汉诺塔游戏
def hannota(n,x,y,z): # n是盘子数,x,y,z为形参作为柱子
    if n == 1: # 递归出口
        print(x,'-->',z)
        return # 返回None
    else:
        hannota(n-1,x,z,y) # 把x上的n-1个盘子借助z,移动到y上
        hannota(1,x,y,z) # 把x上最下面的盘子移动到z上
        hannota(n-1,y,x,z) # 最后把y上的n-1个盘子借助x移动到,z上,大功告成
hannota(3,'X','Y','Z') # 传递实参进去

放一张我自己画的图,里面记录了函数执行的每一步的过程。重点在注意形参和实参的传递问题。
在这里插入图片描述
输出结果:
在这里插入图片描述

  1. 递归函数关键在于归纳总结出规律,确认它是可以递归的,并且找到合适的简单的递归出口。
  2. 在汉诺塔里面,对于实参和形参的理解很重要,要注意其区别。整个函数的打印过程,可以自己动手一步一步的去画一下,每一步怎么传参,打印的是什么,来帮助理解。
  3. 汉诺塔游戏是递归调用,在函数调用过程中,栈的问题需要注意,递归函数一层一层的深入调用,但是每调用一层,函数不是马上返回的,而是放在栈中,相应的局部变量也是存在在里面,只有当调用到n=1时,函数才一个一个返回,n=1时返回了,n=2才可以正确返回,直到n=n时,该函数调用才结束。中间有一个递归函数的返回出问题,都会导致最后的结果出错。
  4. 汉诺塔游戏的移动次数问题其实是一个很经典的等比数列问题。
    假设需要移动的总次数为f(n),根据之前的分析思路,则有f(n) = f(n-1)+1+f(n-1) 即:f(n)=2f(n)=1。变化一下则:[f(n) + 1 ]= 2 * [f(n-1) + 1],一个非常经典的以2为等比的等比数列,又因为f(1)=1,所以求得f(n) = 2^n -1。
    所以如果有3个盘子,移动的步数就是2^3 - 1 = 7次,你可以去数一下,看看是不是?
    再回过头来看hannota(3,‘X’,‘Y’,‘Z’)
    hannota(2,‘X’,‘Z’,‘Y’) # 执行这句时会移动2^2 -1 = 3次盘子
    hannota(1,‘X’,‘Y’,‘Z’) # 执行这句时会移动 1次盘子
    hannota(2,‘Y’,‘X’,‘Z’ ) # 执行这句时会移动2^2 -1 = 3次盘子
    所以hannota(3,‘X’,‘Y’,‘Z’)总共移动了3+1+3=7次盘子。
  1. 通过汉诺塔问题理解递归的精髓
  2. 递归经典案例汉诺塔 python实现
  3. 形参和实参的区别
  4. 汉诺塔 程序实现—Python 及其具体运行步骤

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python3实现汉诺塔问题

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

下载Word文档

猜你喜欢

Python3实现汉诺塔问题

Python3实现汉诺塔问题一、思路二、Python3代码实现三、总结四、参考资料总结归纳为以下3步:把x上的n-1个盘子借助z,移动到y上把x上最下面的盘子移动到z上最后把y上的n-1个盘子借助x移动到,z上,大功告成递归出口:n=1时,
2023-01-31

递归——汉诺塔问题(python实现)

规则每次移动一个盘子任何时候大盘子在下面,小盘子在上面方法假设共n个盘子当n=1时:直接把A上的一个盘子移动到C上(A->C)当n=2时:把小盘子从A放到B上(A->B)这里开始采用参数,rsc源地址=A,dst目的地址=B把大盘子从A放到
2023-01-30

怎么使用Python实现汉诺塔问题

今天小编给大家分享一下怎么使用Python实现汉诺塔问题的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言汉诺塔问题是一个经
2023-07-06

使用Python实现汉诺塔问题示例

这篇文章主要介绍了使用Python实现汉诺塔问题示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-17

java基于递归算法实现汉诺塔问题实例

本文实例讲述了java基于递归算法实现汉诺塔问题。分享给大家供大家参考,具体如下:package test;import java.util.List;import java.util.ArrayList;import java.util.
2023-05-31

Java如何分析汉诺塔问题

这篇文章将为大家详细讲解有关Java如何分析汉诺塔问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、汉诺塔问题来源汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。
2023-06-29

java怎么实现汉诺塔

以下是一个使用Java实现汉诺塔问题的示例代码:public class HanoiTower {public static void main(String[] args) {int n = 3; // 汉诺塔的层数char from
2023-10-23

Java SE如何求解汉诺塔问题

这篇文章主要介绍了Java SE如何求解汉诺塔问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.问题描述汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称
2023-06-29

C语言递归:汉诺塔问题分析

这篇文章主要介绍了C语言递归:汉诺塔问题分析的相关资料,需要的朋友可以参考下
2023-01-28

c语言汉诺塔问题怎么解决

解决汉诺塔问题的常见方法是使用递归。以下是使用递归解决C语言汉诺塔问题的示例代码:```c#include void hanoi(int n, char from_rod, char to_rod, char aux_rod) {if (n
2023-10-07

C语言怎么实现汉诺塔

这篇文章主要介绍了C语言怎么实现汉诺塔的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言怎么实现汉诺塔文章都会有所收获,下面我们一起来看看吧。1.递归思想简介在c语言中,程序调用自身的编程技巧称为递归( re
2023-06-28

python实现汉诺塔方法汇总

学习python遇到的第一个问题:汉诺塔问题的实现。首先是不知道什么是汉诺塔问题,然后是不知道怎么实现。于是百度了下,结果如下: 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一
2022-06-04

PHP怎么实现汉诺塔算法

本篇内容介绍了“PHP怎么实现汉诺塔算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
2023-06-20

用turtle库显示汉诺塔问题的过程

一、什么是汉诺塔问题?   一座汉诺塔,塔内有3个座A、B、C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示。把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在
2023-01-31

java 实现汉诺塔详解及实现代码

java 实现汉诺塔详解及实现代码汉诺塔问题:有三根柱子A,B,C,其中A上面有n个圆盘,从上至下圆盘逐渐增大,每次只能移动一个圆盘,并且规定大的圆盘不能叠放在小的圆盘上面,现在想要把A上面的n个圆盘全部都移动到C上面,输出移动的总步数以及
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录