省略问题描述…

  • 但我们知道64个盘子的移动次数是18 446 744 073 709 551 615这是一个天文数字

解决办法:

我们最终解决的问题就是将a柱子原来由大到小从下到上排好序的圆盘通过b柱子移动到c柱子上即可
如图:

  • 1先定义递归函数hanio(n,a,b,c),该方法表示将n个盘子从a柱子借助b柱子移动到c柱子。
  • 若a柱子上只有一个盘子,此时n=1,则可以直接将盘子从a柱子移动到c柱子上,问题得到解决,但是我有个疑问,这种情况(也就是中间移动出现的过程),a柱子上也只有一个盘子,怎么理解呢?
    忽略,还没讲完,请看下面讲解
    -
  • 若a柱子上有一个以上的盘子,即n>1,此时需要考虑三个步骤。

1先将n-1个盘子从a柱子借助c柱子移动到b柱子,如图:

2.将a柱子上剩下的第n个盘子移动到c柱子上

3.将b柱子上的n-1个盘子借助a柱子上移动到c柱子上,最后完成移动!如图:

python代码

# 汉诺塔
def hannio(n,a,b,c):if n==1:print("move dish %d from %c to %c" % (n, a, c))else:hannio(n-1,a,c,b)print("move dish %d from %c to %c" % (n, a, c))hannio(n-1,b,a,c)print(hannio(4,'a','b','c'))

递归函数返回值原理:

递归是什么?
原理:函数自己调用自己的过程,怎么理解呢?也就是函数可以调用函数里面的所有的函数包括本身。
举例:第一个是阶乘(factorial),第二个是进制转换,看代码:

#阶乘和
def factorial(n):if n==1:return 1else:return n*factorial(n-1)
n=int(input())#输入一个整数
result=factorial(n)
print("数字%d的阶乘和为:%d"%(n,result))
#进制转换
def toStr2(n,base):convertString='0123456789ABCDEF'if n == 0:return ''else:return toStr2(n // base, base) + convertString[n % base]n,m=map(int,input().split())
result=int(toStr2(n,m))
print("%d转化为%d进制后为:%d"%(n,m,result))

ok,结束!

汉诺塔详解过程和递归思想及举例(python代码)相关推荐

  1. C语言 - 汉诺塔详解(最简单的方法,进来看看就懂)

    文章目录 一.什么是汉诺塔? 二.如何实现捏? 三.如何写代码? 四.为什么需要移动 2^n - 1 次/ 一.什么是汉诺塔? 汉诺塔起源于印度的一个古老传说,传说是什么不重要.重要的是它是怎么实现的 ...

  2. 算法笔记 —— 汉诺塔详解

    文章目录 一.问题来源 二.小游戏体验 三.思路分析 四. 程序实现 一.问题来源 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号X.Y.Z),在 ...

  3. 汉诺塔详解(包看包会)

    CSDN的大佬已经解释了很多了,由我这个菜鸟反复理解后得到的一些心得的分享 先看题: 汉诺塔: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根 ...

  4. 汉诺塔详解(超详细)

    递归算法求汉诺塔(C语言版) 汉诺塔: 梵天创造世界的时候做了三根金刚石柱子,x y z三根柱子 在x柱子上 从上往下按照从小到大顺序摞着64片黄金圆盘. 梵天命令婆罗门把圆盘从x柱移到z柱 并且规定 ...

  5. python递归汉诺塔详解_汉诺塔在python中递归,理解磁盘目的地的变化

    我正在努力提高我对python中hanoi之塔递归解决方案代码的理解. 此代码:def moveTower(height,fromPole, toPole, withPole): if height ...

  6. 【python】 turtle实现汉诺塔游戏动画过程

    [python] turtle实现汉诺塔游戏动画过程 import turtle class Stack: #面向对象,定义一个类def __init__(self):self.items = []d ...

  7. 用C语言实现汉诺塔的移动过程并且统计移动的次数

    用C语言实现汉诺塔的移动过程以及移动的次数 题目说明 一共有三个柱子,在一个柱子上穿有若干个圆盘,这些圆盘按下大上小叠放,将这个柱子上的圆盘按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放 ...

  8. 汉诺塔求次数(用递归)

    Copyright(c)2013,烟台大学计算机学院学生 *All rights reserved. *文件名称:汉诺塔求次数(用递归) *作者:杨飞 *完成日期:2013年11月25日 *版本号:v ...

  9. python评价指标_详解分类评价指标和回归评价指标以及Python代码实现

    这篇文章介绍的内容是详解分类评价指标和回归评价指标以及Python代码实现,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下. 1.概念 性能度量(评价)指标,主分为两大类: 1)分类评价 ...

最新文章

  1. Java 多维数组遍历
  2. (视频+图文)机器学习入门系列-第10章 人工神经网络
  3. Java设计模式之结构型:适配器模式
  4. webpack学习之路(四)webpack-hot-middleware实现热更新
  5. elasticsearch -- head插件
  6. 回溯 皇后 算法笔记_算法笔记-回溯法
  7. ***出更--获取源代码的***
  8. 小米12后壳谍照曝光:后置三摄相机模组 采用大眼瞪小眼设计
  9. 晨哥真有料丨太快得到是不是就不珍惜了?这锅,男生真的不背!
  10. 计算机硬件实现乘法是什么,乘法器
  11. Git 官方安装教程
  12. 间接寻址级别不同_金属激光切割机的不同配置是什么
  13. java jdbc标签jsp_JDBC结合JSP使用(1)
  14. spring freemarker 获取后端的值
  15. SVN 分支合并到主干
  16. 关于代理。谢谢方志朋
  17. 为开发者们准备的10款超棒的jQuery视频插件
  18. 【raft】学习六:etcd/raft 选举和选举优化
  19. SDKMAN!使用指南
  20. CCF201509-1数列分段(C语言)

热门文章

  1. strict_strtoul函数找不到定义问题
  2. JZOJ6384【NOIP2019模拟2019.10.23】珂学家
  3. 让自己做得更好的几句格言
  4. [原创]中国大陆民谣盘点5 马格《女孩与四重奏》
  5. 线性代数笔记:矩阵的对角化、SVD分解及应用
  6. linux字符串转为整型,C语言将字符串转换为整数
  7. 洛谷 P1337 [JSOI2004]平衡点 / 吊打XXX
  8. 《拾叶集》一个会写诗的程序员  二零一八年十月九日
  9. python读取文件路径格式_Python学习笔记读写文件之文件与文件路径
  10. CSDN每日一练技巧