有三根柱子一次为A,B,C 现在A柱子上有3个块,按照汉诺塔规则移动到C柱子上去,打印步骤?

我们这样理解:A为原始柱,C为目标柱,B为缓冲柱

1.定义一个函数move(n,a,b,c),n为原始柱上面的块数,a为原始柱名称,b为缓冲柱,c为目标柱

def move(n,a,b,c):
pass

2.首先,我们假定原始柱上只有一个块,那就是直接从原始柱移动到目标柱,无需经过缓冲柱

def move(n,a,b,c):
if n == 1:
print(a,'-->',c)
else:
pass

3.当原始柱上不止一个块的时候,我们先将上面n-1个块移动到缓冲柱上面,此时方法中的目标柱就是缓冲柱(请注意参数位置)

def move(n,a,b,c):
if n == 1:
print(a,'-->',c)
else:
move((n-1),a,c,b)
pass

4.移动完成之后此时在三根柱子上就是原始柱上有编号n的最大块,缓冲柱上有n-1个块,我们将最大块移动到目标柱上

def move(n,a,b,c):
if n == 1:
print(a,'-->',c)
else:
move((n-1),a,c,b)
print(a,'-->',c)
pass

5.最后一步,将缓冲柱子上的n-1个块移动到目标柱上

def move(n,a,b,c):
if n == 1:
print(a,'-->',c)
else:
move((n-1),a,c,b)
print(a,'-->',c)
move((n-1),b,a,c)

方法定义以及调用过程截图如下:

总结:整个过程中原始柱,缓冲柱,目标柱的角色不停地发生变化,当你把握住这点后,便可以轻松的使用递归调用来解决此问题

Python 实现汉诺塔问题(递归)的更多相关文章

  1. python实现汉诺塔(递归)

    def hanoi(n, A, B, C): if n > 0: hanoi(n-1, A, C, B) print("%s->%s" % (A, C)) hanoi( ...

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

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

  3. 从"汉诺塔"经典递归到JS递归函数

    前言 参考<JavaScript语言精粹> 递归是一种强大的编程技术,他把一个问题分解为一组相似的子问题,每一问题都用一个寻常解去解决.递归函数就是会直接或者间接调用自身的一种函数,一般来 ...

  4. 用C语言实现汉诺塔自动递归演示程序

    用C语言实现汉诺塔自动递归演示程序 程序实现效果 1.变界面大小依照输入递归数改变. 2.汉诺塔自动移动演示. 3.采用gotoxy实现流畅刷新. 4.保留文字显示递归流程 程序展示及实现 githu ...

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

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

  6. Python之汉诺塔递归运算

    汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆 ...

  7. 【学习】Python解决汉诺塔问题

    参考文章:http://www.cnblogs.com/dmego/p/5965835.html   一句话:学程序不是目的,理解就好:写代码也不是必然,省事最好:拿也好,查也好,解决问题就好!   ...

  8. Python实现汉诺塔问题的可视化(以动画的形式展示移动过程)

    学习Python已经有一段时间了,也学习了递归的方法,而能够实践该方法的当然就是汉诺塔问题了,但是这次我们不只是要完成对汉诺塔过程的计算,还要通过turtle库来体现汉诺塔中每一层移动的过程. 一.设 ...

  9. Hanio汉诺塔代码递归实现

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

随机推荐

  1. 面向对象-PHP面向对象的特性

     1.类和公有化 class Computer {     //什么叫做类内,就是创建类的花括号内的范围叫做类内,其他地方则类外.     //public 是对字段的公有化,这个字段类外即可访问,赋 ...

  2. Angular2 直接给元素指定超链接打开会带有 `unsafe` 字样导致数据不能加载

    解决方法: 在 component 中引入 import { DomSanitizer } from "@angular/platform-browser";然后在构造函数中注入  ...

  3. panda 函数-处理空值

    今天这里谈的函数,以后进行数据分析的时候会经常用到. import numpy as npimport pandas as pdfrom pandas import DataFrame , Serie ...

  4. CSS布局框架 960GS

    1.960GS 特点 小巧简单,功能单一(仅仅做排版的工作,其他东西靠自己.)(三个文件:reset.css,960.css,font.css) 界面宽960px,适合目前主流1/2以上显示器都满屏宽 ...

  5. C#/Java 程序员转GO/golang程序员笔记大全(day 01)

    前言: 整理一下学习 Go 语言的笔记,作为一名老程序,学习一名新的开发语言自然不需要像小白那样从 HelloWorld 看起. 简单整理一下 Go 的一些差异处,希望对大家学习 go 有点帮助,不正 ...

  6. 用stringstream实现从数字到字符串的转化

    代码简单,字符串到数字和数字到字符串的写法类似. #include <sstream> #include <bits/stdc++.h> using namespace std ...

  7. pycharm debug

    1  debug 的模式,只有在打断点是才能运行. 2  主方法运行的时候 ,可以在下面输入一行 a =1 .方便debug 打完断电的会出现三角头, 运行甲壳虫 3   一步一步运行, F8 , 当 ...

  8. Upgrade Bash on Ubuntu from 14.04 to 16.04

    过程 1 sudo -S apt-mark hold sudo sudo -S apt-mark hold procps sudo -S apt-mark hold strace 2 sudo do- ...

  9. 【python常见面试题】之python 中对list去重的多种方法

    在python相关职位的面试过程中,会对列表list的去重进行考察.(注意有时会要求保证去重的顺序性) 1.直观方法 li=[1,2,3,4,5,1,2,3] new_li=[] for i in l ...

  10. PHP stripos()、strripos()和strrpos() 使用方法和区别

    区别 stripos():查找字符串首次出现的位置(不区分大小写) 写法:stripos ( string $haystack , string $needle [, int $offset = 0 ...