5.4.递归 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 1 def calc(n) : 2 print(n) 3 if int(n/2) ==0: 4 return n 5 return calc(int(n/2) ) 6 7 calc(10) 8 9 输出: 10 10 11 5 12 2 13 1 递归特性: 1.必须有一个明确的结束条件 2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少 3.递归效率不高, 递归层次过多会导致栈溢出(在计算机中, 函数调用是通过栈(stack) 这种数据结构实现 的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限 的,所以,递归调用的次数过多,会导致栈溢出) 1-1def calc(n): print(n) return calc(n/2)# 返回的时候,调用自己,自己又执行了,如果 return 的是 n; 就会变成死循环# 就像贪吃蛇一样,我吃我自己1-1-1def calc(n): print(n) return calc(n)calc(10)--->RecursionError: maximum recursion depth exceeded while calling a Python object1-1-2def calc(n): print(n) return calc(n+1)calc(0)--->从结果来看,最大的递归数是 999;这是程序的保护机制比如两个镜子对着照,进入无限循环,外面的函数还没有结束,导致内存很快耗光所以,递归的第一个特性就是必须有一个明确的结束条件 2-1def calc(n): print(n) if n/2 > 0: return calc(n/2)calc(10)# 为什么无法结束?因为有小数,所以永远无法结束,需要将它变为整数2-1-1def calc(n): print(n) if int(n/2) > 0: return calc(int(n/2))calc(10)--->105212-1-2def calc(n): print(n) if int����,���(n/2) > 0: return calc(int(n/2)) print("-->",n)calc(10)--->10521--> 1做递归,最好的办法就是加断点调试
20210104 递归
来源:本站原创 浏览:99次 时间:2022-03-17
- 上一篇: 20210111 装饰器之案例剖析
- 下一篇: Vue自学之路3-vue模版初探
推荐资讯
- PHP - Manual: event_base_new
- PHP - Manual: magic_quotes_runtime
- PHP - Manual: HaruPage::setLineCap
- PHP - Manual: MysqlndUhConnection::killConnection
- PHP - Manual: dbplus_xunlockrel
- PHP - Manual: gupnp_root_device_start
- PHP - Manual: MysqlndUhConnection::getStatistics
- PHP - Manual: MysqlndUhConnection::connect
- PHP - Manual: Beyond TTL: user-defined storage
- PHP - Manual: CairoStatus
推荐站点
- At-lib分类目录
At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家
www.at-lib.cn - 中国链接目录
中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。
www.cnlink.org - 35目录网
35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。
www.35mulu.com - 就要爱网站目录
就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。
www.912219.com - 伍佰目录
伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。
www.wbwb.net