笔记

斐波那契数列

汉诺塔

有64个盘子,三根柱子(从左至右依次为x,y,z柱)。要求将这64个盘子从x移动到z上。

解决思想:

首先,将三根柱子依次分为起始柱,辅助柱和目标柱。在移动过程中,这三个柱子不是绝对不变的,而是会不断改变的。(移动多个盘子时,先确定好是从哪个柱子移到哪个柱子,即先确定起始柱和目标柱,然后剩下的柱子作辅助柱)

把问题分为三个简单步骤:1、将63个盘子从x借助z移动到y上(此时x:起始柱,y:目标柱,z:辅助柱);

2、将最后一个盘子从x移动到z上;

3、将1中的63个盘子从y借助x移动到z上(此时x:辅助柱,y:起始柱,z:目标柱)。

那么,第二个步骤显然一步就可以完成,而第一、二步骤实际上又是两个需要细分的问题,又可以各自分为三个简单步骤:

问题一:将63个盘子从x(借助z)移动到y上:

1、将62个盘子从x借助y移动到z上;

2、将最后一个盘子从x移动到y上;

3、将1中的62个盘子从z借助x移动到y上。

问题二:将(1中的)63个盘子从y(借助x)移动到z上:

1、将62个盘子从y借助z移动到x上;

2、将最后一个盘子从y移动到z上;

3、将1中的62个盘子从x借助y移动到z上。

依此类推,可以不断细分到只移一个盘子的最简单的情况。

代码实现:

def hanoi(n,x,y,z):
#n为整型,x,y,z为字符(传入的实参表示柱子的名字)(形参中的x,y,z分别对应起始,辅助,目标柱)if n == 1:print(x,'-->',z)else:hanoi(n-1,x,z,y)#将前n-1个盘子从x移动到y上print(x,'-->',z)hanoi(n-1,y,x,z)#将这n-1个盘子从y移动到z上

课后作业

动动手:

0. 使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式)。

def Dec2Bin(dec):result = ''if dec:result = Dec2Bin(dec//2)return result + str(dec%2)else:return result

1. 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==> [1, 2, 3, 4, 5]

def get_digits(n):list1 = []if n:list1 = get_digits(n//10)return list1.append(n%10)else:return list1

2. 还记得求回文字符串那道题吗?现在让你使用递归的方式来求解,亲还能骄傲的说我可以吗?

def is_palindrome(n, start, end):if start > end:return 1     else:return is_palindrome(n, start+1, end-1) if n[start] == n[end] else 0string = input('请输入一串字符串:')
length = len(string)-1if is_palindrome(string, 0, length):print('\"%s\"是回文字符串!' % string)
else:print('\"%s\"不是回文字符串!' % string)

3. 使用递归编程求解以下问题:

有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

def age(n):if n == 1:return 10else:return age(n-1) + 2 

【小甲鱼Python】递归:这帮小兔崽子、汉诺塔课后作业相关推荐

  1. 【小甲鱼Python】函数:我的地盘听我的课后作业

    笔记 函数与过程 在除了Python以外的其他大多数编程语言中,函数与过程是两个概念.函数(function)有返回值,而过程(procedure)是简单的,特殊且没有返回值的. Python严格来说 ...

  2. 【小甲鱼Python】文件:因为懂你,所以永恒课后作业

    笔记 打开文件 使用open()来打开文件. 其中常用的是前两个参数. 参数file如果带路径则在路径中寻找文件,如果不带路径则在当前文件夹寻找文件. 写路径时,要么用/,要么用\\. 参数mode: ...

  3. 第023、024讲:这帮小兔崽子汉诺塔 | 学习记录(小甲鱼零基础入门学习Python)

    (标答出处: 鱼C论坛) <零基础入门学习Python> 测试题: 0.使用递归编写一个十进制转换为二进制的函数(要求采用'取2取余'的方式,结果与调用bin()函数一样返回字符串形式) ...

  4. [小甲鱼] 零基础入门python第023、024讲课后测试题及答案:这帮小兔崽子汉诺塔

    动动手: 0.使用递归编写一个十进制转换为二进制的函数(要求采用'取2取余'的方式,结果与调用bin()函数一样返回字符串形式) def ten2bin(n):result=''if n:result ...

  5. 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)

    第十七章 二分查找(非递归)和分治算法(汉诺塔) 文章目录 第十七章 二分查找(非递归)和分治算法(汉诺塔) 一.二分查找 1.思路 2.代码实现 二.分治算法(汉诺塔) 1.概述 2.汉诺塔 一.二 ...

  6. 小甲鱼python全部视频_小甲鱼全套教程之Python系列视频教程

    Python 当前位置:主页 > 编程教程 > Python > 小甲鱼全套教程之Python系列视频教程 小甲鱼全套教程之Python系列视频教程 教程大小:   发布时间:201 ...

  7. 小甲鱼python教程视频怎么样-小甲鱼零基础入门学习Python视频教程全套96集

    资源介绍 教程名称: 小甲鱼零基础入门学习Python视频教程全套96集 课程简介: xa0 xa0 Python具有跨平台特点,Python可以在各种不同类型的计算机上运行,Windows.MAC. ...

  8. 小甲鱼python课件免费_小甲鱼零基础入门学习Python+全套源码课件-资源共享吧收集整理...

    游客,如果您要查看本帖隐藏内容请回复 第000讲 愉快的开始(视频+课件) 第001讲 我和Python的第一次亲密接触(视频+课件) 第002讲 用Python设计第一个游戏(视频+课件+源代码) ...

  9. python turtle绘图-案例集锦(小猪佩奇、哆啦A梦、小黄人、樱花树、皮卡丘、汉诺塔、高达、星空等)

    1.小猪佩奇: import turtle as t t.pensize(4) t.hideturtle() t.colormode(255) t.color((255, 155, 192), &qu ...

最新文章

  1. java中如何把时间封装成类,java-如何在不使用任何不推荐使用的类的情况下将日期从一种格式转换为另一种格式的日期对象?...
  2. Octave(open source版的matlab)介绍Octave online的使用
  3. 数论与数学专题练习(一)(201802~201805)
  4. php setcookie使用变量,PHP setcookie() 函数
  5. sliverlight 开发FAQ
  6. Flask Middle
  7. vue底部跳转_Vue中底部tabBar切换及跳转
  8. 关于SQL语句中分号的问题
  9. python写ini文件_Python读写ini文件
  10. 解决办法:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
  11. BootStrap自定义小图标
  12. ZigBee组网实验:多终端节点向协调器发送数据协调器给终端节点发送数据
  13. tenforflow版YOLOv3下VOC数据集的准备和训练
  14. 深入理解操作系统——datalab-handout
  15. AT32看门狗WDT使用方法
  16. 安卓pdf阅读器_推荐一款手机PDF阅读器、编辑器xodo docs安卓版
  17. 计算机图形学之二维平移旋转缩放代码
  18. H3Cmsr830 l2tp二层隧道协议配置详解(host-R版)
  19. CTF-NEFU校赛-题解
  20. “打开方式”中找不到打开某一类型文件想使用的软件

热门文章

  1. win732位升级64位教程
  2. 概率论笔记1.1.3事件间的关系
  3. 如何判断网页是否更新??
  4. 实现原理讲解!我的阿里春招之路分享,灵魂拷问
  5. 周伯文,刘强东的技术“知己”
  6. ib数学ia选题例子
  7. 03709马原第三章考点总结
  8. 拼多多2亿美元战略投资国美,家电市场将会如何变化?
  9. 企业信息化系统基础——AD:使用C#批量创建帐号
  10. 计算机学测打多少字,速度测试,一分钟能打多少字?