首页 > 编程语言 >汉诺塔问题python算法

汉诺塔问题python算法

时间:2024-11-03 22:17:55浏览次数:3  
标签:输出 调用 python hanoi 算法 汉诺塔 print moving 圆环

汉诺塔问题就是有且只有三个可以放置圆环的地方,所有圆环按照从小到大依次从上向下排列在第一个柱子上,求经过什么操作将顺序不变的将圆环整体从第一个移动第三个柱子上

def hanoi(n,a,b,c):
    if n>0:
        hanoi(n-1,a,c,b)          #1
        print("moving from %s to %s" %(a,c))        #2
        hanoi(n-1,b,a,c)            #3
hanoi(1,'A','B','C')

 首先讲解只有一个圆环时,则调用hanoi(1,'A','B','C'),首先判断if条件,n>0,则调用hanoi(0,'A','C','B'),n=0,返回空,即什么都不返回,然后执行print语句,输出:moving from A to C

可能会有人疑惑为啥不是A to B,因为最外层是n=1,#1语句调用了n=0,为空,#2调用的a和c就是最外层的a,c,等下循环两次时,里面的参数会改变,因为这里是形式参数

然后调用的#3也是n=0,返回空

#输出 :moving from A to C
def hanoi(n,a,b,c):
    if n>0:
        hanoi(n-1,a,c,b)#1
        print("moving from %s to %s" %(a,c))#2
        hanoi(n-1,b,a,c)#3
hanoi(2,'A','B','C')

然后n=2时,运行到#1时,调用n=1,继续调用n=0,返回空,回到#2语句,输出:

#moving from A to B

因为调用#1时候,最外层函数将b赋给了c,所以在以n=2的函数中的#1循环结束,然后执行#2,输出

#moving from A to C

这里调用的时n=2时的后面三个参数,最后执行#3,和#1一样,执行两层,n=0时返回空,n=1时输出

#moving from B to C

后面的n等于3,4等等和上面方法类似,大家学习代码一定能要有思考推到能力,知道逻辑一定要自己去推导后面的,不懂得可以在评论区讨论

标签:输出,调用,python,hanoi,算法,汉诺塔,print,moving,圆环
From: https://blog.csdn.net/2301_78050920/article/details/143471797

相关文章

  • 《python爬虫入门教程03--重剑无峰168》
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档python爬虫入门教程03前言一、urllib.request.urlretrieve()函数的介绍?二、使用示例总结前言本此程序主要演示python爬虫来简单爬取网页、图片、视频的示例。但是这是一个简单版的,一些未经过处理的网......
  • 影刀RPA实战:嵌入python,如虎添翼
    1. 影刀RPA与Python的关系影刀RPA与Python的关系可以从以下几个方面来理解:技术互补:影刀RPA是一种自动化工具,它允许用户通过图形化界面创建自动化流程,而Python是一种编程语言,常用于编写自动化脚本。影刀RPA可以与Python结合使用,利用Python的强大功能来实现更复杂的自动化需......
  • 简单的C语言数据加解密算法实现与探讨
    在数据安全日益重要的今天,加密技术成为了保护信息不被未授权访问或篡改的重要手段。虽然在实际应用中,我们通常会采用如AES、RSA等复杂的加密算法,但理解加密的基本原理和实现一个简单的加密算法对于学习计算机安全基础至关重要。本文将介绍如何使用C语言实现一个基于简单替换加密(Su......
  • 【算法】滑动窗口
    目录什么是滑动窗口:一、长度最小的子数组:二、无重复字符的最长子串:三、找到字符串中所有的异位词四、串联所有单词的子串:什么是滑动窗口:滑动窗口是双指针的一种升级版:当使用双指针算法的时候,发现左右两个指针可以不回退,这个时候就可以升级成滑动窗口算法了。滑动......
  • 【python-程序设计赛道-模拟题笔记整理】2024年第六届全国高校计算机能力挑战赛
    Python知识点整理不都正确是指要求找错误的如果没有错误的,全都是事实就没有符合题意的所以选选项D,三个选项不都正确模块模块不能被多次导入模块是构造程序的方式在执行时,一个模块只会被导入一次python程序文件是一个模块包语法空行不是python语法的一部分缩进是p......
  • 简单的C语言数据加解密算法实现与探讨
    在数据安全日益重要的今天,加密技术成为了保护信息不被未授权访问或篡改的重要手段。虽然在实际应用中,我们通常会采用如AES、RSA等复杂的加密算法,但理解加密的基本原理和实现一个简单的加密算法对于学习计算机安全基础至关重要。本文将介绍如何使用C语言实现一个基于简单替换加密(Su......
  • Python 一维列表基础语法
    【Python】【基础语法】【列表】引子创建一个列表获取数据的类型输出列表获取列表的长度获取元素的值获取元素的索引遍历列表练习引子列表(list)是python的基本数据类型之一。一维列表,常常被简称为列表,亦称为向量(vector)。六大基本数据类型数字型字符串str列表list元组......
  • 五、数据结构与算法
    五、数据结构与算法注意:本文章学习了zst_2001大佬的视频。本人亲自写的笔记。其中部分图片是结合了给位大佬的笔记图片整理的。目的是为了帮助速记。不喜勿喷1、时间空间复杂度排序1、时间复杂度O(1)<O(log2n)<O(n)<O(nlog2n)<O(n²)<O(n^3)加法:相加,保留最高项系数化......
  • 使用wxpython开发跨平台桌面应用,基类对话框窗体的封装处理
    在开发桌面界面的时候,往往都需要对一些通用的窗体进行一些抽象封装处理,以便统一界面效果,以及继承一些通用的处理过程,减少重复编码。本篇随笔介绍使用wxpython开发跨平台桌面应用,基类对话框窗体的封装处理,介绍基于wx.lib.sized_controls.SizedDialog对话框类的基类封装,以便简化子......
  • BFS和DFS算法全面解析【算法入门】
    1.前言和树的遍历类似,图的遍历也是从图中某点出发,然后按照某种方法对图中所有顶点进行访问,且仅访问一次。但是图的遍历相对树而言要更为复杂。因为图中的任意顶点都可能与其他顶点相邻,所以在图的遍历中必须记录已被访问的顶点,避免重复访问。根据搜索路径的不同,我们可以将遍......