Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >小甲鱼《零基础学习Python》课后笔记(二十二):函数——递归是神马

小甲鱼《零基础学习Python》课后笔记(二十二):函数——递归是神马

作者头像
小火柴棒
发布于 2019-01-11 07:19:53
发布于 2019-01-11 07:19:53
62000
代码可运行
举报
文章被收录于专栏:石开之旅石开之旅
运行总次数:0
代码可运行

测试题 0.递归在编程上的形式是如何表现的呢? 递归形式上就是在函数体里调用自身。如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def fun():
	return fun()

不过这样是不行的,因为没有停止条件,IDLE会一直报错,直到你按下Ctlr + C。python3默认递归的深度是100层,可以通过以下代码修改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import sys
>>> sys.setrecursionlimit(1000)

1.递归必须满足哪两个基本条件?

递归需要满足:调用自身;有停止条件。 2.思考一下,按照递归的特性,在编程中有没有不得不使用递归的情况? 例如汉诺塔,目录索引(因为你不知道目录里是否还有目录),树结构的定义等. 3.用递归去计算阶乘问题或斐波那契数列是很糟糕的算法,你知道为什么吗? 因为递归是函数调用自身,每一次调用都要进行压栈和出栈,需要很多时间和内存资源。 4.请聊一聊递归的优缺点(无需官方陈词,想到什么写什么就可以) 优点:可以使代码简洁;在解决一些问题,如汉诺塔问题时比较方便 缺点:使用上需要谨慎,因为会占用大量时间和资源;还有可能因为停止条件设置不合适而导致内存爆满。 5.拿手机拍一张“递归自拍照片” 拍这个的话需要两面镜子,那会是一个没有停止条件的递归,无限循环反射下去。

动动手

0.使用递归编写一个power()函数内建函数pow(),即power(x,y)为计算并返回x的y次幂的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def power(x,y):
	if y > 0:
		return x*power(x, y-1)
	else:
		return 1

测试代码及结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> for x in range(2,6):
	for y in range(6):
		print(pow(x,y) == power(x,y), end = "\t")

		
True	True	True	True	True	True	True	True	True	True	True	True	True	True	True	True	True	True	True	True	True	True	True	True	

1.使用递归编写一个函数,利用欧几里得算法求最大公约数,例如gcd(x,y)返回值为参数x和参数y的最大公约数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def gcd(x,y):
	if y > 0:
		yushu = x%y
		x = y
		y = yushu
		return gcd(x,y)
	else:
		return x

测试代码及结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> for x in range(1,6):
	for y in range(10,16):
		print('%d,%d最大的约数是:%d' %(x,y,gcd(x,y)))

		
1,10最大的约数是:1
1,11最大的约数是:1
1,12最大的约数是:1
1,13最大的约数是:1
1,14最大的约数是:1
1,15最大的约数是:1
2,10最大的约数是:2
2,11最大的约数是:1
2,12最大的约数是:2
2,13最大的约数是:1
2,14最大的约数是:2
2,15最大的约数是:1
3,10最大的约数是:1
3,11最大的约数是:1
3,12最大的约数是:3
3,13最大的约数是:1
3,14最大的约数是:1
3,15最大的约数是:3
4,10最大的约数是:2
4,11最大的约数是:1
4,12最大的约数是:4
4,13最大的约数是:1
4,14最大的约数是:2
4,15最大的约数是:1
5,10最大的约数是:5
5,11最大的约数是:1
5,12最大的约数是:1
5,13最大的约数是:1
5,14最大的约数是:1
5,15最大的约数是:5
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年08月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python学习笔记(九)--函数
#编写一个函数findstr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。 # 例如假定输入的字符串为: # Don't aim for success if you want it; just do what you love and believe in, and it will come naturally #子字符串为“it”,函数执行后打印:子字符串在目标字符串中出现2次。 方法1: def findstr(x,y): lx=list(x) ly=list(y)
张树臣
2018/05/15
8330
小甲鱼《零基础学习Python》课后笔记(十七):函数——Python的乐高积木
1) 可以降低维护成本(函数只需修改def部分内容,而拷贝黏贴则需要每一处出现的地方都作修改)
小火柴棒
2019/01/11
6040
Python从0到100(十三):函数的类型及其应用
一个函数的内部可以调用其他函数。但是,如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。
是Dream呀
2024/04/23
1940
算法基础学习笔记——⑭欧拉函数\快速幂\扩展欧几里得算法\中国剩余定理
在C语言中,可以使用算法来计算欧拉函数(Euler's Totient Function)。欧拉函数,也被称为φ函数,用于计算小于或等于给定数字n的正整数中与n互质的数的个数。
命运之光
2024/03/20
2330
算法基础学习笔记——⑭欧拉函数\快速幂\扩展欧几里得算法\中国剩余定理
相互递归(2)
  所有的相互递归都可以被转化为一般的递归,从而最终可以用lambda演算来完成。
窗户
2019/05/25
8880
最大公约数与递归
最大公约数,是两个数共有的素因数乘积。 例如: 462 = 2*3*7*11 1071=3*3*7*17 所以,最大公约数为3*7=21
用户1147754
2019/05/27
8390
常规笔试算法总结.md
所谓迭代,是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
全栈工程师修炼指南
2020/10/23
3740
学习笔记-小甲鱼Python3学习第十七
优秀的东西永远是经典的,经典的东西永远是简单的,不是说复杂不好,而是能够把复杂的东西简单化,堪称经典。
py3study
2020/01/03
4190
​最大公约数、同余原理详解
欧几里得算法,也被称为辗转相除法,用于计算两个整数的最大公约数,其核心公式为:gcd(a,b) = gcd(b,a mod b)。
用户1142828
2025/04/12
1550
7828:最大公约数与最小公倍数
7828:最大公约数与最小公倍数 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 两个正整数的最大公约数是G,最小公倍数是L,它们的和最小是多少? 输入两个不大于10000的正整数G和L,中间用单个空格隔开。数据保证L是G的倍数。输出一个正整数,即最小的和。样例输入 14 280 样例输出 126 来源《奥数典型题举一反三(小学五年级)》 (ISBN 978-7-5445-2882-5) 模拟试卷一 第6题 查看 提交 统计 提问 1 #
attack
2018/04/11
1K0
C++数学与算法系列之初等数论
在日常生活中,数通常出现在标记(如公路、电话和门牌号码)、序列号和编码上。在数学里,数的定义延伸至包含如分数、负数、无理数、超越数及复数等抽象化的概念。
一枚大果壳
2022/12/20
4020
C++数学与算法系列之初等数论
牛客刷题1-勾股元组数
如果ABC之间两两互质,即A与B,A与C,B与C均互质没有公约数,则称其为勾股数元组。请求出给定n~m范围内所有的勾股数元组
皮大大
2023/08/25
1940
Python学习笔记(11)递归
1、递归在编程上的形式是如何表现的吗? 在编程上,递归表现为函数调用本身这么一个行为 举个例子(递归求阶乘) def factorial(n): if n==1: return 1 else: return n*factorial(n-1) num=int(input("请输入一个正整数:")) result=factorial(num) print("%d的阶乘是:%d"%(num,result)) 2、递归必须满足的两个条件是什么? 函数调用自身 设
张树臣
2018/05/15
6000
程序员数学基础【五、math库常用函数】(Python版本)
由于此类语言入门非常容易,哪怕初中生亦可以,并且本科/研究生写论文、做实验多数所用语言都是【Python】故而选择此语言。
红目香薰
2022/11/28
7120
最大公约数(二进制算法)
二进制最大公约数算法避免了欧几里得算法(辗转相除法)的大量取模操作,有效减少了时间消耗,且更为方便。 原理 本算法基于以下事实: 对于两个数的最大公约数 gcd(m, n),有 m<n 时,gcd(m, n)=gcd(n, m) m 偶 n 偶时,gcd(m, n)=2*gcd(m/2, n/2) m 偶 n 奇时,gcd(m, n)=gcd(m/2, n) m 奇 n 偶时,gcd(m, n)=gcd(m, n/2) m 奇 n 奇时,gcd(m, n)=gcd(n, m-n) 采用递归即可。
Cell
2022/02/25
5070
JavaScript数据结构与算法-Array
例如:1 ^ 1 = 0 、 2 ^ 2 = 0、 0 ^ 1 = 1 、1 ^ 1 ^ 2 ^ 3 ^ 2 ^ 4 ^ 3 = 4
FinGet
2019/06/28
6030
要理解递归,先得理解递归
       对于一个整天写增删改查的java程序员,厌倦了成天搬砖,所以最近研究了一下递归。首先声明,本人非科班出身,对于刚接触递归就感觉有一种莫名高大上算法的赶脚,本着好奇+梦想成为牛逼攻城狮的想
我叫刘半仙
2018/04/16
1.3K0
要理解递归,先得理解递归
算法--递归
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
奋飛
2019/08/15
5400
扩展欧几里得算法公式推导与Python实现
AI摘要:在数学中,最大公约数(GCD)是两个整数之间的一种重要关系,而贝祖等式则进一步揭示了GCD的深层次应用。本文通过深入浅出的方式,详细推导扩展欧几里得算法的公式,从欧几里得算法开始,一步步揭示其背后的数学原理,并最终实现计算GCD及其贝祖系数的Python代码。无论你是否具备高等数学背景,这篇文章将带你探索如何巧妙地利用扩展欧几里得算法解决实际问题,让你在数学的世界中发现更多的趣味和应用。 扩展欧几里得算法公式推导与Python实现
曈曈too
2024/06/16
2890
欧里几德及扩展欧里几德算法
欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。 第一种证明:       a可以表示成a = kb + r,则r = a mod b   假设d是a,b的一个公约数,则有   d|a, d|b,而r = a - kb,因此d|r   因此d是(b,a mod b)的公约数   假设d 是(b,a mod b)的公约数,则   d | b ,
Angel_Kitty
2018/04/08
9040
相关推荐
Python学习笔记(九)--函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验