python 递归调用
2019独角兽企业重金招聘Python工程师标准>>>
解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。
尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。
上面的fact(n)
函数由于return n * fact(n - 1)
引入了乘法表达式,所以就不是尾递归了。要改成尾递归方式,需要多一点代码,主要是要把每一步的乘积传入到递归函数中:
def fact(n):return fact_iter(n, 1)def fact_iter(num, product):if num == 1:return productreturn fact_iter(num - 1, num * product)
可以看到,return fact_iter(num - 1, num * product)
仅返回递归函数本身,num - 1
和num * product
在函数调用前就会被计算,不影响函数调用。
fact(5)
对应的fact_iter(5, 1)
的调用如下:
转载于:https://my.oschina.net/u/3055388/blog/862651
python 递归调用相关推荐
- Python递归调用
递归调用:在调用一个函数过程中,直接或间接又调用该函数本身,称之为递归调用 递归必备的2个阶段 1递推 2回溯 当递推结束后就可以进行回溯了 Python默认设置递归层数为1000 递归示例: de ...
- python递归调用详解_Python递归调用自己的函数
原博文 2019-11-16 10:36 − def fact(x): if x == 1: return 1 else: return x * fact(x-1) ... 0 191 相关推荐 20 ...
- python棋盘放麦粒求和递归_Python递归调用实现数字累加的代码
我就废话不多说了,直接上代码吧! def sum_numbers(num): # 1.出口 if num == 1: return 1 # 2.数组累加 temp = sum_numbers(num ...
- Python函数的递归调用
一:递归的定义 函数的递归调用:是函数嵌套调用的一种特殊形式 具体是指: 在调用一个函数的过程中又直接或者间接地调用到本身 # 直接调用本身 def f1():print('是我是我还是我')f1() ...
- python入门day16——函数的递归调用、二分法、三元表达式、匿名函数
文章目录 函数的递归调用 递归调用应该分为两个阶段 二分法 三元表达式 匿名函数 函数的递归调用 函数的递归调用:就是在调用一个函数的过程中又直接或间接地调用自己 示例1:直接调用自己 def foo ...
- python递归解压文件_递归调用解压zip包或rar包
不知道有没有小伙伴跟我一样犯这样的懒,一些简单重复的工作,总是嫌麻烦,懒得一步步去做,还每次都重复一样的操作.比如解压zip或rar的包,也许你会说,不就解压嘛,有啥的.问题来了,如果只是一个简单的压 ...
- python递归解压文件_Python之路10-递归调用解压zip包或rar包
不知道有没有小伙伴跟我一样犯这样的懒,一些简单重复的工作,总是嫌麻烦,懒得一步步去做,还每次都重复一样的操作.比如解压zip或rar的包,也许你会说,不就解压嘛,有啥的.问题来了,如果只是一个简单的压 ...
- python 3 递归调用与二分法
递归调用与二分法 1.递归调用 递归调用:在调用一个函数的过程中,直接或间接地调用了函数本身. 示例: def age(n):if n == 1:return 18 # 结束条件return age( ...
- python学习-综合练习四(最大公约数、最小公倍数、生成日历、递归调用、字符串)
文章目录 最大公约数 最小公倍数 生成日历 递归调用 字符串 说明:本篇博文的知识点大部分来自 Python3 实例 最大公约数 求最大公约数的逻辑比较简单,这里直接上代码: def maxCommD ...
最新文章
- Kubernetes 集群使用 Jenkins 持续发布
- alert(1) to win 16
- Win2K下关联进程/端口之代码初步分析
- js引用action层变量
- php在数据流(内存)中操纵远程数据
- atcoder 2643 切比雪夫最小生成树
- 最多分成多少块(51Nod-2502)
- QEMU多进程(Multi-process QEMU)及vfio-user应用
- vapor mysql_vapor MySQL 作为Cache
- 第二章--物理层--重点
- 如何用视频转换器把qlv格式转换mp4
- 教你如何购买阿里云香港服务器(教程)
- [bowen干货]-redis常用五种数据类型命令和场景描述
- OAuth2授权原理
- Kubernetes之ServiceAccount+Secret(超详细汇总)
- @ConfigurationProperties(prefix = )异常报错解决方案:
- 情人节的自娱自乐——情书事件
- 【狂神说Java】视频笔记
- GUI(Graphical User Interface)
- 虚拟机构建局域网用户和组远程
热门文章
- android ajax 跨域更新本地html,本地webapp是怎么解决跨域问题的?
- C 线程中容易忽视的 restrict 修饰符修饰
- ios与html数据交互,iOS iOS与html进行交互
- 计算机程序输入x是3求输出七年级的题,七年级上册数学第三单元练习题
- android unity 关闭应用_在后台运行的Android Unity应用程序
- 如何在自己开发的日程管理页面插入提醒功能_微信中6个藏得很深但却很有用的功能...
- Verilog初级教程(23)Verilog仿真中的显示任务
- FPGA配置模式(Altera版)
- 纯CSS3实现GIF图片动画效果
- crontab定时任务详解