解决递归问题的关键在于寻找递归的结构
寻找一个可递归问题的递归结构,不仅可以直观地转换为程序语言,进行问题的求解,而且也为我们人脑对问题的求解提供思路,比如3阶的汉诺塔,我们还可简单设计方案,倘若四阶、五阶甚至更高阶,有了对递归的认识,我们便有了求解问题的套路

比如斐波那契数列的递归结构是什么:

f(n)=f(n−1)+f(n−2)

f(n)=f(n-1)+f(n-2)

从数学语言向程序语言:

def fib(n):return n if n <= 1 else fib(n-1)+fib(n-2)

整数的幂指数 ana^n:

an=a×an−1f(n)=a×f(n−1)

\begin{array}{l} a^n=a\times a^{n-1}\\ f(n)=a\times f(n-1) \end{array}

从数学语言向程序语言:

def power(a, n):return a if n == 1 else a*power(a, n-1)

nn 阶汉诺塔的递归结构又是什么呢?我们可将 nn 阶汉诺塔想象成两部分,上面的 n−1n-1 个圆盘(将此 n−1n-1 视为 1),和最下的 11 个圆盘,也即:

Hanoi(n)=Hanoi(n−1)+Hanoi(1)

\textrm{Hanoi}(n)=\textrm{Hanoi}(n-1)+\textrm{Hanoi}(1)
我们便将一个 nn 阶的汉诺塔问题,变成了类似二阶的问题。

def hanoi(n, fromStack, toStack, spareStack):if n == 1:print('move disk from', fromStack, 'to', toStack)else:hanoi(n-1, fromStack, spareStack, toStack)hanoi(1, fromStack, toStack, spareStack)hanoi(n-1, spareStack, fromStack, toStack)
if __name__ == '__main__':hanoi(3, 'a', 'b', 'c')

汉诺塔问题递归求解的时间复杂度分析

t(n)=====1+t(n−1)+t(1)+t(n−1)3+2t(n−1)3+2×3+22×3+⋯+2n−2×3+2n−1t(1)3×(2n−1−1)+2n−1×23×(2n−1−1)+2n

\begin{split} t(n)=&1+t(n-1)+t(1)+t(n-1)\\ =&3+2t(n-1)\\ =&3+2\times 3+2^2\times 3+\cdots+2^{n-2}\times 3+2^{n-1}t(1)\\ =&3\times (2^{n-1}-1)+2^{n-1}\times 2\\ =&3\times (2^{n-1}-1)+2^n \end{split}

时间复杂度为:O(2n)O(2^n),指数级(exponential);

从“递归结构”到解汉诺塔问题的求解相关推荐

  1. 用类比方式学习编程中函数递归(个人理解仅供参考)(内含汉诺塔问题的求解)

    目录 1.前言 2.递归的数学模型 3.相关的c语法 4.将递归的数学模型写成编程语言 5.利用类比方法将实际问题的代码写成函数递归的形式 例1: 例2: 6.汉诺塔问题的求解 1.前言 本人在学习函 ...

  2. python递归详解+汉诺塔小案例_汉诺塔,python递归实现解法步骤

    def hanoi(n,x,y,z):#函数实现n个盘子在x,y,z,移动 if n==1: print(x, ' --> ', z) else: hanoi(n-1,x,z,y)#将n-1层个 ...

  3. 个盘子的汉诺塔需要移动几步_看漫画学C++039:递归解汉诺塔

    点击蓝字 关注我们 本话内容 请输入 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到小按顺序放置64个金盘(如 ...

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

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

  5. 多图详解汉诺塔递归实现思路--含实现代码

    前言 为了节约大家的时间,本文对汉诺塔的定义就不做赘述了,如果有小伙伴不清楚汉诺塔的规则可以直接点蓝字跳转过去. 本篇博客内容 汉诺塔实现的思路 用递归的方式实现汉诺塔 汉诺塔实现的思路 我们先以两个 ...

  6. 图文详解汉诺塔(附C语言实现代码)

    关注.星标公众号,直达精彩内容 来源:http://a.nxw.so/1iDyQD 一.前言 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候 ...

  7. 汉诺塔问题的求解与分析

    一.递归算法介绍 这篇文章讲的是一个古老而又经典的汉诺塔问题,他是递归算法的一个很好的应用实例.有关递归函数的介绍,在使用递归函数求解字符串的逆置问题文章中介绍过.递归思想是来解决可计算问题的,他的根 ...

  8. python汉诺塔游戏_python求解汉诺塔游戏

    本文实例为大家分享了python求解汉诺塔游戏的具体代码,供大家参考,具体内容如下 一.问题定义 百度百科定义:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.据说大梵天创造世界的时候做了三 ...

  9. 递归巧解汉诺塔问题(hanoi)

    /* hanoi问题:在source处的盘子通过help处到达target source:一开始所处的位置 help:盘子可以借助的地方 target:到达的地方 n:盘子的个数 */ void ha ...

最新文章

  1. CloudHub概述
  2. 我所了解的Linux运维技术
  3. db2 如何导出insert语句_实用技术:MYSQL特别实用的几种SQL语句送给大家,让你的SQL高大上...
  4. android面试自定义view,资深面试官:自定义View的实现方式,你知道几种?
  5. ansible-playbook 手工编译安装nginx
  6. Coolite(二)服务器端Alert,Confirm,Prompt
  7. opencv:图像的基本变换
  8. 2021奢侈品营销启示录
  9. WPF中显示任意目录的图片或其他资源文件
  10. 《Javascript高级程序设计》读书笔记(1-3章)
  11. 周期性工作crontab
  12. ubuntu 无法识别Usb
  13. 人脸识别入门论文《Deep Facial Expression Recognition: A Survey》学习笔记
  14. Ubuntu 修改DNS
  15. Android Studio基础输入文本框EditText
  16. Knative v1.0.x安装全过程
  17. Vue.extend构造器
  18. 一篇文章带你吃透VUE响应式原理
  19. 手机邮箱看不到已发送邮件_iPhone用户请注意:你的邮件App得禁用,刚曝光的安全漏洞,iOS 6以上设备全中招...
  20. 下篇 | 大数据公司挖掘数据价值的49个典型案例(值得收藏)

热门文章

  1. Android上传图片的两种方式
  2. java list打乱顺序_「collections.shuffle」Collections.shuffle()打乱List - seo实验室
  3. 春招你必须掌握的Python经典面试题(附赠简历模版)
  4. 非极大值抑制(Non-Maximum Suppression,NMS)(转)
  5. php类和自定义函数实例,php中三个调用用户自定义函数实例详解
  6. Linux 下 Tomcat Https
  7. Flink1.6系列之—数据流编程模型
  8. 【luogu P3931 SAC E#1 - 一道难题 Tree】 题解
  9. 机器学习实战1--预测链家租房价格
  10. Android安装后没有完成和打开按钮