提升Python效率之使用循环机制代替递归函数
2019-07-23 10:09
507 查看
斐波那契数列
当年,典型的递归题目,斐波那契数列还记得吗?
def fib(n): if n==1 or n==2: return 1 else: return fib(n-1)+fib(n-2)
当然, 为了程序健壮性,加上 try...except...
def fib(n): if isinstance(n, int): print('兄弟,输入正整数哈') return try: if n==1 or n==2: return 1 elif n <= 0: print('兄弟别输入0或负数呀') else: return fib(n-1)+fib(n-2) except RecursionError: print('兄弟,超过了最大递归深度'
是的,无论时间还是空间复杂度,递归真的是不太好使哈!这是递归的写法:
def fib(n): if n==1 or n == 2: return 1 a, b = 1, 1 for i in range(2, n): a, b = b, a+b return b
我稍微解释三点:
- 为啥是
range(2, n)
,因为,斐波那契数列从 1 开始,所以 fib(n) 就是数列的第 n 项 - 由于前两项都为 1 ,所以要少两项,为
range(2, n)
(要循环 n-2 次) - a, b = b, a+b 这里你也许也有困惑,我简单说说,一般Python解释器会将逗号分隔的变量直接看做一个元组,
- 又因为,解释器先执行等式右边的,所以,这样相当于 元组拆包
- a, b = b, a+b 这句话的精髓在于,在等式右边将 b 视为
fib(n-2)
,将 a+b 视为 fib(n-1)
杨辉三角
同样,先写递归写法(我这里不考虑特殊情况了,时间有限):
def YH_tri(a, b): if a == b or b == 0: return 1 else: return YH_tri(a-1, b)+YH_tri(a-1, b-1)
老铁们自己先想想该怎么写??
总结
以上所述是小编给大家介绍的提升Python效率之使用循环机制代替递归函数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
您可能感兴趣的文章:
相关文章推荐
- python效率提升:ctypes的初次使用
- 提升python程序效率:使用局部变量替换模块变量
- python效率提升专题-循环
- 探究数组排序提升Python程序的循环的运行效率的原因
- 使用优化器来提升Python程序的执行效率的教程
- 一段效率很高的for循环语句使用方法
- 使用对象-关系映射(ORM)系统中间件提升软件开发效率及质量
- 提高PHP编程效率的49个关键点,缓存机制引入提升性能
- PreparedStatement效率为什么高/为什么要使用PreparedStatement代替Statement
- Python性能提升一 —— 高计算模块使用C++编写
- [原创]使用命令行工具提升cocos2d-x开发效率(二)之CocosBuilder篇
- 使用对象-关系映射(ORM)系统中间件提升软件开发效率及质量
- 使用for循环代替while循环的场合
- 54点提高PHP编程效率 引入缓存机制提升性能
- 使用并行计算大幅提升递归算法效率
- python条件和循环的使用方法
- [原创]使用命令行工具提升cocos2d-x开发效率(一)之TexturePacker篇
- paip.提升效率--调试--日志系统日志参数含义---python
- 54点提高PHP编程效率 引入缓存机制提升性能
- 使用对象-关系映射(ORM)系统中间件提升软件开发效率及质量