《零基础入门学习Python》第023、024讲:递归:这帮小兔崽子、汉诺塔
目录
动动手
0. 使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式)。
1. 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。
2. 还记得求回文字符串那道题吗?现在让你使用递归的方式来求解,亲还能骄傲的说我可以吗?
3. 使用递归编程求解以下问题:
4. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
动动手
0. 使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式)。
def Dec2Bin(dec):result = ''if dec:result = Dec2Bin(dec//2)return result + str(dec%2)else:return resultprint(Dec2Bin(62))
1. 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。
举例:get_digits(12345) ==> [1, 2, 3, 4, 5]
解题思路:利用除以10取余数的方式,每次调用get_digits(n//10),并将余数存放到列表中即可。要注意的是结束条件设置正确。
result = []
def get_digits(n):if n > 0:result.insert(0, n%10)get_digits(n//10)get_digits(12345)
print(result)
2. 还记得求回文字符串那道题吗?现在让你使用递归的方式来求解,亲还能骄傲的说我可以吗?
解题思路:有好多种方法,不过综合效率来说,小甲鱼的实现方式比较朴素,利用递归每次索引前后两个字符进行对比,当start > end的时候,也正是首尾下标“碰面”的时候,即作为结束递归的条件。
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岁。请问第五个人多大?
解题思路:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
def age(n):if n == 1:return 10else:return age(n-1) + 2print('哈哈,我知道了,第五个人的年龄是 %d 岁,啵啵脆!' % age(5))
4. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
(1)斐波那契数列的递归实现:
1,1,2,3,5,8,13,21.....
我们可以用数学函数来定义:
分别用迭代和递归实现:
迭代
def fab(n):n1 = 1n2 = 1n3 = 1if n < 1:print("输入错误!")return -1while (n-2) > 0:n3 = n2 + n1n1 = n2n2 =n3n -= 1return n3
递归:
def fab(n):if n < 1:print('输入有误!')return -1elif n == 1 or n == 2:return 1else:return ferber(n-1)+ferber(n-2)
递归算法称为分治思想。
(2)递归实现汉诺塔
对于游戏的玩法,我们可以简单分解为三个步骤:
将前63个盘子从a移到b上
将最底下的第64个盘子从a移到c
将b上的63个盘子移到c
问题1:将a上的63个盘子借助c移到b
问题2:将b上的63个盘子借助a移到c
然后:
问题1拆解为:
将前62个盘子从a移到c上
将最底下的第63个盘子从a移到b
将c上的62个盘子移到b
问题2拆解为:
将前62个盘子从b移到a上
将最底下的第63个盘子从b移到c
将a上的62个盘子移到b
《零基础入门学习Python》第023、024讲:递归:这帮小兔崽子、汉诺塔相关推荐
- 第023、024讲:这帮小兔崽子汉诺塔 | 学习记录(小甲鱼零基础入门学习Python)
(标答出处: 鱼C论坛) <零基础入门学习Python> 测试题: 0.使用递归编写一个十进制转换为二进制的函数(要求采用'取2取余'的方式,结果与调用bin()函数一样返回字符串形式) ...
- [小甲鱼] 零基础入门python第023、024讲课后测试题及答案:这帮小兔崽子汉诺塔
动动手: 0.使用递归编写一个十进制转换为二进制的函数(要求采用'取2取余'的方式,结果与调用bin()函数一样返回字符串形式) def ten2bin(n):result=''if n:result ...
- 小甲鱼Python第二十三讲、第二十四讲(递归-这帮小兔崽子、汉诺塔)
def fab(n):迭代的方法if n<1:return -1while(n-2)>0:n3=n2+n1n1=n2n2=n3n=n-1return n3 def rabbit(n):递归 ...
- 小甲鱼《零基础学习Python》课后笔记(二十三、二十四):递归——这帮小兔崽子和汉诺塔
由于递归实在不太理解,而且觉得题目大多是为了用递归而使用递归,觉得题目暂时没有做的必要,所以先跳过,以后用到再补充学习- 2018年8月11日
- P24 023递归:这帮小兔崽子
小甲鱼Python P24 023递归:这帮小兔崽子 P24 023递归:这帮小兔崽子 # def fab(n): # n1 = 1 # n2 = 1 # n3 = 1 # # if n < 1 ...
- 小甲鱼零基础学python笔记 P24 递归:这帮小兔崽子
P24 递归:这帮小兔崽子 斐波那契数列:后一个数等于前两数之和 f(n-2)+ f(n-1)=f(n) 例题: 方法一:函数执行 利用函数来执行: 函数执行逻辑: 初始值都为1,利用循环来进行判断若 ...
- 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)
第十七章 二分查找(非递归)和分治算法(汉诺塔) 文章目录 第十七章 二分查找(非递归)和分治算法(汉诺塔) 一.二分查找 1.思路 2.代码实现 二.分治算法(汉诺塔) 1.概述 2.汉诺塔 一.二 ...
- 第023、024讲:递归:这帮小兔崽子、汉诺塔
动动手 0. 使用递归编写一个十进制转换为二进制的函数(要求采用"取2取余"的方式,结果与调用bin()一样返回字符串形式). def Bin(x):if x==0:return ...
- FishC笔记—23,24 讲 递归:这帮小兔崽子,汉诺塔
本期内容详解: 斐波那契数列的两种实现方式: 迭代的方式: def fab(n): n1 = 1 n2 = 1 n3 = 1 if n < 1: n = int(input('输入有误,请重新输 ...
最新文章
- 数量级提升!深度学习让机器人抓取更高效
- 什么是URL、绝对URL和相对URL
- 如何对C4C UI上的手机号码字段加上自定义验证逻辑
- 【多视图几何】TUM 课程 第2章 刚体运动
- 开源 非开源_在开源中吃我们自己的狗粮
- Ubuntu下pycharm无法输入中文
- python机器学习案例系列教程——逻辑分类/逻辑回归LR/一般线性回归(softmax回归)
- plc仿真实训软件_欧倍尔新品:现代电气控制和自动生产线装调两款虚拟仿真实训软件...
- Python中如何安装pip,xlrd
- 在指定文件类型中递归查找到目标字符串
- 魔百盒九联UNT402H,(芒果、南传、百视通)等通刷刷机固件
- 什么是第三方支付?第三方支付流程
- Excel如何冻结多行多列
- 奶瓶 linux内核,CDlinux专用inflator-打气筒(reaver的图形化,beini奶瓶作者编写)下载 - 无线安全新手入门 - 无线论坛...
- JavaScript高级(二)|函数进阶+正则表达式
- 良心推荐,一款PDF转JPG图片的免费在线工具
- android 第三方模拟器 genymotion安装问题修复
- 微信小程序如何跳转微信公众号
- 如何用python求圆面积?
- C++,QT,ListView社交群列表控件组件
热门文章
- html5建议使用,[HTML5]label标签使用以及建议
- 定义一个数组,里面存放星期一、星期二…… 直到星期日(共7天),在页面显示奇数日,如星期一,星期三,星期日等。
- 谷歌涂鸦(goofle doodle)
- 用python写五彩糖咕噜和五彩环环
- java 框架注入漏洞修复_Mybatis框架下易产生SQL注入漏洞的场景和修复方法
- C# 文件路径-Window服务
- 喜马拉雅追更攻略:如何订阅更新通知
- eds能谱图分析实例_成分分析的四大神器—XRF、ICP、EDX和WDX
- 利用js制作一个简单的QQ农场小游戏
- 在一个项目编译多个不同签名、包名、资源实现apk换皮