刚开始看python实现汉诺塔,自己想了很久才想明白,在这里记录一下,希望以后忘记能够立马记起。

n=1时,可以直接a->c

n=2时,可以借助b然后将a->c

n=3时,可以将最上面的那两个作为一个整体先移动到b,然后把最下面的移动到c,再把上面两个移动到c,那上面两个具体怎么移动呢,不就是n=2的时候那样子移动吗?只不过这时候上面两个的目标就是b,所以需要借助c移动到b,再移动完最下面的那时候,目标就又变为了从b移动到c,而需要借助的是a。

再往上就同理,始终将最底下的上面作为一个整体,这n-1个先移到不用的柱子上,再移动最下面的,这时候最下面的那个就不用考虑了,只需要去考虑n-1个,所以目标就变为将n-1个从b移动到c,这时候就先把n-2个移动到a,然后再移动最下面的到c,然后就可以只管n-2个了。依次类推。

def move(n, a, b, c):
if n ==1:
print a, '-->', c
return
move(n-1, a, c, b)
print a, '-->', c
move(n-1, b, a, c) move(2, 'A', 'B', 'C')

来看以上代码,看n=2的时候,第一次调用move,这时候依次把实参ABC赋值给形参abc,第一个if不满足,所以到第五行第二次调用move,这时候其实就是move(2, 'A', 'C', 'B'),把实参ACB依次赋值给形参abc,这时候满足if了,将a移动到c,其实就是将A移动到B,也就是我们需要借助的柱子,和上面分析的一样,然后这个函数返回空值,第二次调用就结束了,(return后整个函数就执行完了)这时候就得执行第一次第五行之后的了,也就是将a移到c,但是注意这时候的形参ac分别指的是第一次传进来的实参,也就是A移到C,然后执行最后一行,再次调用move,这时候将BAC传给了abc,然后调用move,满足if,a移动到c,也就是B移动到C。这是整个过程。

n=3 的过程底下已经给出。

从宏观上看,可以将括号里的第123个形参分别看作是现在的位置,借助的柱子,目标柱子。代码2.3行就是在说如果是一个的时候直接从现在位置移动到目标位置就行了。然后如果不是,就将n-1由a借助c去移动到b,然后再将a移动c,然后再将b上的n-1个借助a移动到c。

汉诺塔Python的更多相关文章

  1. 汉诺塔 python版

    汉诺塔问题:如果将n个盘子(由小到大)从a通过b,搬到c,搬运过程中不能出现小盘子在大盘子下面的情况. 思路分析:假设前要移动第100个盘子,分两步走,移动第99个:再移动第100个:而要移动第99个 ...

  2. 汉诺塔python实现

    下载汉诺塔ppt def move(n,A,B,C): if n == 1: print(A,'->',C) else: move(n-1,A,C,B) print(A,'->',C) m ...

  3. 1.python算法之汉诺塔

    代码如下: #!/usr/bin/env python # encoding: utf-8 """ @author: 侠之大者kamil @file: 汉诺塔.py @t ...

  4. python解决汉诺塔问题

    今天刚刚在博客园安家,不知道写点什么,前两天刚刚学习完python 所以就用python写了一下汉诺塔算法,感觉还行拿出来分享一下 首先看一下描述: from :http://baike.baidu. ...

  5. 【Python实践-3】汉诺塔问题递归求解(打印移动步骤及计算移动步数)

    # -*- coding: utf-8 -*- #汉诺塔移动问题 # 定义move(n,a,b,c)函数,接受参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量 # 然后打印出把所有盘子从A借助B ...

  6. Python实现:汉诺塔问题

    汉诺塔问题不管在任何编程语言里都是经典问题,是采用递归算法的经典案例,该问题可以抽象如下: 一 .3根圆柱A,B,C,其中A上面串了n个圆盘 二 .这些圆盘从上到下是按从小到大顺序排列的,大的圆盘任何 ...

  7. python运用turtle 画出汉诺塔搬运过程

    python运用turtle 画出汉诺塔搬运过程 1.打开 IDLE 点击File-New File 新建立一个py文件 2.向py文件中输入如下代码 import turtle class Stac ...

  8. python 游戏 —— 汉诺塔(Hanoita)

    python 游戏 —— 汉诺塔(Hanoita) 一.汉诺塔问题 1. 问题来源 问题源于印度的一个古老传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆 ...

  9. python汉诺塔问题的递归理解

    一.问题背景 汉诺塔问题是源于印度一个古老传说. 源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下 ...

随机推荐

  1. MindSpore 高阶优化器

    MindSpore 高阶优化器 MindSpore自研优化器THOR(Trace-based Hardware-driven layer-ORiented Natural Gradient Desce ...

  2. 语义分割:基于openCV和深度学习(二)

    语义分割:基于openCV和深度学习(二) Semantic segmentation in images with OpenCV 开始吧-打开segment.py归档并插入以下代码: Semanti ...

  3. 3D MinkowskiEngine稀疏模式重建

    3D MinkowskiEngine稀疏模式重建 本文看一个简单的演示示例,该示例训练一个3D卷积神经网络,该网络用一个热点向量one-hot vector重构3D稀疏模式.这类似于Octree生成网 ...

  4. 如何使用TensorCores优化卷积

    如何使用TensorCores优化卷积 本文将演示如何在TVM中使用TensorCores编写高性能的卷积计划.假设卷积的输入有大量数据.首先介绍如何在GPU上优化卷积. TensorCore简介 每 ...

  5. Json文件解析(下)

    Json文件解析(下) 代码地址:https://github.com/nlohmann/json   从STL容器转换 任何序列容器(std::array,std::vector,std::dequ ...

  6. 我进金山wps啦!

    成功进入金山wps暑期精英训练营,希望能够学到很多知识,写这篇文章纪念一下

  7. 【VBS】获取文件夹大小

    文件截图: 运行结果: 第一步:编写脚本 GetFloderSize.vbs 1 '获得文件夹的大小 by 王牌飞行员(https://www.cnblogs.com/KMould/p/1233481 ...

  8. Django基础之模型层(02)

    1 重要概念 # 多表查询 """ 正向查询 反向查询 当前查询对象是否含有外键字段 如果有就是正向 没有无则是反向 口诀: 正向查询按外键字段 多对多需要额外再加一个. ...

  9. 2021Qt打包发布教程

    因为最近写了一个程序,然后想着能给室友玩耍,就研究了一下如何打包,写这篇博客记录一下 1. 首先获得程序的Release版本 就是点击这个Release,然后构建一遍 2. 进入构建的release文 ...

  10. OpenResty高并发

    在电商项目中所有的访问都是通过首页访问进去的,那么首页门户的访问频率会是非常高的,用我们专业术语来说就是并发量高,这时问题就来了,并发量高我们在做程序时就要保证首页的抗压能力强,而且还要保证抗压的同时 ...