汉诺塔递归算法进阶

When something is specified in terms of itself, it is called recursion. The recursion gives us a new idea of how to solve a kind of problem and this gives us insights into the nature of computation. Basically, many of computational artifacts are naturally self-referential, for example:

如果根据自身指定某些内容,则称为递归。 递归为我们提供了有关如何解决一种问题的新思路,这使我们可以洞悉计算的本质。 基本上,许多计算工件自然都是自引用的,例如:

  • File system文件系统
  • Fractal graph分形图
  • Algorithms演算法

Any recursion function consists of two parts:

任何递归函数都包括两个部分:

  • Base case: the last case of the recursion. For every recursion, the last step must be the base case and it is going to return a specific value to us.

    基本情况:递归的最后一种情况。 对于每次递归,最后一步必须是基本情况,它将为我们返回一个特定值。

  • Reduction step: Assuming that the recursion works for smaller values of its argument, then use the function to compute a new return value.

    归约步骤:假定递归适用于其参数的较小值,然后使用该函数计算新的返回值。

Now think about the following examples:

现在考虑以下示例:

To compute a recursion function of a positive integer N as its parameter,

要计算正整数 N作为其参数的递归函数,

  • Base case: The ending case with N equals a specific number (usually 1 or 0) and this will give us a specific return result under this condition.

    基本情况: N的结束情况等于一个特定的数字(通常为1或0),在这种情况下,这将为我们提供特定的返回结果。

  • Reduction step: For each of the steps of this recursion, we use N-t as its new parameter (t could be any constant based on the question).

    归约步骤:对于该递归的每个步骤,我们将N- t用作其新参数(根据问题, t可以是任何常数)。

In this case, the positive integer N is called the depth of this recursion.

在这种情况下,正整数N称为此递归的深度。

To compute a recursion function of a sequence Seq as its parameter,

要计算序列 Seq的递归函数作为其参数,

  • Base case: The ending case with Seq equals an empty set (empty list/empty string/etc.) and this will give us a specific return result under this condition.

    基本情况:带有Seq的结束情况等于一个空集(空列表/空字符串等),在这种情况下,这将为我们提供特定的返回结果。

  • Reduction step: For each of the steps of this recursion, we use a shorter Seq (usually moves one element from the previous one) as its new parameter.

    归约步骤:对于此递归的每个步骤,我们都使用较短的Seq(通常将上一个元素移到上一个元素)作为其新参数。

问题1.倒数问题 (Question 1. Counting-down Problem)

Suppose we are working on a project of rocket and we want to count down numbers before the rocket blast off. We count down from 5 and after we count 1, we will then print “Blastoff

汉诺塔递归算法进阶_进阶python 1递归相关推荐

  1. python中汉诺塔如何理解_【Python学习之七】递归——汉诺塔问题的算法理解

    汉诺塔问题 汉诺塔的移动可以用递归函数非常简单地实现.请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的 ...

  2. python汉诺塔递归算法流程图_详解汉诺塔Python递归程序

    学习递归时,很多小伙伴对汉诺塔的递归算法非常疑惑,不清楚那么复杂的移动过程,为何用四五行代码就给解决了.汉诺塔问题:有三根柱子A,B,C.A柱上有若干碟子,每次移动一块碟子,小的只能叠在大的上面,把所 ...

  3. python汉诺塔算法解析_基于Python的汉诺塔算法

    首先贴出Python编写的汉诺塔算法的代码: def hanoti(n,x1,x2,x3): if(n == 1): print('move:',x1,'-->',x3) return hano ...

  4. python汉诺塔运行程序_用python编写一个程序,得到汉诺塔的解决方案

    古代有一座汉诺塔,塔内有3个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示. 有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个座上的盘 ...

  5. python汉诺塔_汉诺塔递归算法/搬金盘的婆罗门 - Python实现

    汉诺塔递归算法/搬金盘的婆罗门 - Python实现 版权声明 本文节选自作者本人的图书<Python编程基础及应用>,高等教育出版社.本文可以在互联网上自由转载,但必须:注明出处(作者: ...

  6. python汉诺塔递归算法流程图,python实现汉诺塔递归算法经典案例

    Python汉诺塔递归问题 python请用递归算法编程解决汉诺塔问题 在线等 关于python递归函数实现汉诺塔 def move(n,a,b,c): #1 if n==1: #2 print(a, ...

  7. 汉诺塔递归算法/搬金盘的婆罗门 - Python实现

    汉诺塔递归算法/搬金盘的婆罗门 - Python实现 本文引用自作者编写的下述图书; 本文允许以个人学习.教学等目的引用.讲授或转载,但需要注明原作者"海洋饼干叔 叔":本文不允许 ...

  8. python汉诺塔递归算法流程图_python实现汉诺塔的图解递归算法

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

  9. python汉诺塔递归算法_Python文摘:汉诺塔问题与递归算法

    历史传说: 在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜 ...

最新文章

  1. AI战场,李彦宏马化腾马云都在频频刷脸,周鸿祎和他的360在想啥呢?
  2. 初学python还是swift-请问零基础学习python 和swift哪个更好入门呢?
  3. Android Service的onStartCommand返回值用法
  4. 解决echart中:Cannot read property ‘queryComponents‘ of undefined
  5. oracle脚本导入mysql数据库_oracle脚本导入mysql数据库
  6. GDB调试时的参数设置
  7. optisystem仿真 光源线宽与干涉
  8. latex数学符号加粗_latex 数学符号加粗
  9. 软件开发外包项目常见的问题
  10. VBA单元格、工作表、工作簿
  11. [opencv4]——fatal error: opencv2/opencv.hpp: No such file or directory #include <opencv2/opencv.hpp>
  12. 20090522: IBM X22
  13. 计算机硬件基础英语ppt,计算机英语 第一单元 计算机硬件 computer hardware.ppt
  14. cork--快速,精确的线性布尔运算
  15. 腾讯员工收入曝光,我顿悟了一个成人世界的残酷事实
  16. 设置柱状图每根柱子的颜色
  17. kafka启动失败 The Cluster ID doesn‘t match...
  18. java 7 安装_Java7详细安装使用技巧教程
  19. 被iPhone 11带火的UWB产业链有哪些?
  20. ios开发中常用的一些软件

热门文章

  1. c++继承父类的子类,如何调用父类的同名函数?
  2. linux shell编程多线程和wait命令学习
  3. Java面试题及答案2020,java数组循环赋值
  4. fiddler抓包1-抓小程序https包
  5. 数据结构与算法 —— 链表linked list(01)
  6. webstorm环境安装配置(less+autoprefixer)
  7. javascript动态创建table
  8. SQLServer 优化SQL语句 in 和not in的替代方案
  9. 汇编语言hello word!
  10. spring 设计模式