零基础入门学习Python(24)--递归:汉诺塔
知识点
这节课主要讲解用递归的方法,实现汉诺塔的解答
对于游戏的玩法,我们可以简单分解为三个步骤:
1) 将前63个盘子从X移动到Y上。
2) 将最底下的第64个盘子从X移动到Z上。
3) 将Y上的63个盘子移动到Z上。
问题一:将X上的63个盘子借助Z移到Y上;
1) 将前62个盘子从X移动到Z上。
2) 将最底下的第63个盘子移动到Y上。
3) 将Z上的62个盘子移动到Y上。问题二:将Y上的63个盘子借助X移到Z上。
1) 将前62个盘子从Y移动到X上。
2) 将最底下的第63个盘子移动到Z上。
3) 将X上的62个盘子移动到Y上。
用递归方法实现
#汉诺塔
def hanoi(n,x,y,z):
if n == 1:
print(x,'-->移动至',z)
else:
hanoi(n-1,x,z,y)#将前n-1个盘从x移动至y上
print(x,'-->移动至',z)#将最底下一个盘从x移动至z上
hanoi(n-1,y,x,z)#将y上的n-1个盘从y移动至z上
n = int(input('请输入汉诺塔的层数:'))
hanoi(n,'A','B','C')
================= RESTART: C:\Users\ThinkPad\Desktop\test.py =================
请输入汉诺塔的层数:5
A -->移动至 C
A -->移动至 B
C -->移动至 B
A -->移动至 C
B -->移动至 A
B -->移动至 C
A -->移动至 C
A -->移动至 B
C -->移动至 B
C -->移动至 A
B -->移动至 A
C -->移动至 B
A -->移动至 C
A -->移动至 B
C -->移动至 B
A -->移动至 C
B -->移动至 A
B -->移动至 C
A -->移动至 C
B -->移动至 A
C -->移动至 B
C -->移动至 A
B -->移动至 A
B -->移动至 C
A -->移动至 C
A -->移动至 B
C -->移动至 B
A -->移动至 C
B -->移动至 A
B -->移动至 C
A -->移动至 C
课后习题
动动手
- 使用递归编写一个十进制转换二进制的函数(要求采用“除2取余”的方式,结果与调用bin()一样返回字符串形式)
#迭代形式
def Dec2Bin(dec):
temp = []
result =''
while dec:
x = dec % 2
dec //= 2
temp.append(x)
while temp:
result += str(temp.pop())
return result
print(Dec2Bin(10))
================= RESTART: C:\Users\ThinkPad\Desktop\test.py =================
1010
#递归形式
def Dec2Bin(dec):
result = ''
if dec:
result = Dec2Bin(dec//2)
return result + str(dec%2)
else:
return result
print(Dec2Bin(10))
================= RESTART: C:\Users\ThinkPad\Desktop\test.py =================
1010
>>>
- 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:
get_digits(12345) ==> [1,2,3,4,5]
result = []
def get_digits(n):
if n > 0:
result.insert(0,n%10)
get_digits(n//10)
#result.sort()
get_digits(512364)
print(result)
================= RESTART: C:\Users\ThinkPad\Desktop\test.py =================
[5, 1, 2, 3, 6, 4]
- 还记得求回文联字符串那道题吗?现在让你使用递归的方式求解?
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 0
string = input('请输入一串字符串:')
length = len(string)-1
if is_palindrome(string, 0, length):
print('\"%s\"是回文字符串!' % string)
else:
print('\"%s\"不是回文字符串!' % string)
使用递归编程求解以下问题:
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第三个人大2岁。问第三个人,又说比第二个人大2岁。问第2个人,说比第一个人大2岁。最后问第一个人,他说是10岁。请问第五个人多大?
def age(n):
if n == 1:
return 10
else:
return age(n-1) + 2
print('哈哈,我知道了,第五个人的年龄是 %d 岁,啵啵脆!' % age(5))
零基础入门学习Python(24)--递归:汉诺塔的更多相关文章
- 《零基础入门学习Python》【第一版】视频课后答案第001讲
测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...
- 【Python教程】《零基础入门学习Python》(小甲鱼)
[Python教程]<零基础入门学习Python>(小甲鱼) 讲解通俗易懂,诙谐. 哈哈哈. https://www.bilibili.com/video/av27789609
- 零基础入门学习Python(1)--我和Python的第一次亲密接触
前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...
- 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案
国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...
- 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案
初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...
- 零基础入门学习Python(22)--函数:递归是神马
知识点 递归是神马? 递归是属于算法的范畴. 递归就是函数调用自身的一种行为. >>> def g(): return g() >>> g() Traceback ...
- 【Python学习之七】递归——汉诺塔问题的算法理解
汉诺塔问题 汉诺塔的移动可以用递归函数非常简单地实现.请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的 ...
- 零基础入门学习Python(36)--类和对象:给大家介绍对象
知识点 Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前 ...
- 零基础入门学习Python(17)--函数:Python的乐高积木
前言 相信大家小时候都玩过神奇的乐高积木, 只要通过想象力和创造力我们可以拼凑很多神奇的东西,那么随着我们学习的深入,我们编写的Python代码也将日益增加,并且也越来越复杂, 所以呢,我们需要找寻一 ...
随机推荐
- 洛谷 P2763 试题库问题【最大流】
s向所有类别属性连流量为当前类别属性需要的个数的边,所有题目向t连流量为1的边(表示只能选一次),所有属性向含有它的题连容量为1的边.跑一变dinic,结果小于m则无解,否则看每一个类别属性连出去的题 ...
- springboot(九) Cache缓存和Redis缓存
1. Cache缓存 1.1 缓存的概念&缓存注解 Cache 缓存接口,定义缓存操作.实现有:RedisCache.EhCacheCache.ConcurrentMapCache等 Cach ...
- IIS重新注册
打开程序-运行-cmd:输入一下命令重新注册IISC:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
- Python添加自己的模块路径
进入Python编辑环境后可以,通过Python的sys.path属性获得当前搜索路径的配置,可以看到之前我们设置的路径已经在当前搜索路径中了. 然后通过sys.path.append('F:\Pyt ...
- bzoj258 [USACO 2012 Jan Gold] Bovine Alliance【巧妙】
传送门1:http://www.usaco.org/index.php?page=viewproblem2&cpid=111 传送门2:http://www.lydsy.com/JudgeOn ...
- EL表达式、JSTL
EL表达式 一.简介 > JSP表达式 <%= %> 用于向页面中输出一个对象. > 到JSP2.0时,在我们的页面中不允许出现 JSP表达式和 脚本片段. ...
- Python学习 Day 2-数据类型和变量
数据类型和变量 在Python中,能够直接处理的数据类型有以下几种: 整数 Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080, ...
- Nodejs AES加密不一致问题的解决
最近在做android游戏,客户端与Nodejs服务端数据的交互用AES进行加密,发现Nodejs与java的加密形式不一样.查询N久资料发现java端需要对密钥再MD5加密一遍(我了个大擦),本来对 ...
- CAS介绍
1.概述 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 耶 ...
- 字符串(String)几个常用方法的详解
String:(字符串) indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. stringObject.indexOf(searchvalue,fromindex) searc ...