提升Python效率之使用循环机制代替递归函数
斐波那契数列
当年,典型的递归题目,斐波那契数列还记得吗?
deffib(n): ifn==1orn==2: return1 else: returnfib(n-1)+fib(n-2)
当然,为了程序健壮性,加上 try...except...
deffib(n): ifisinstance(n,int): print('兄弟,输入正整数哈') return try: ifn==1orn==2: return1 elifn<=0: print('兄弟别输入0或负数呀') else: returnfib(n-1)+fib(n-2) exceptRecursionError: print('兄弟,超过了最大递归深度'
是的,无论时间还是空间复杂度,递归真的是不太好使哈!这是递归的写法:
deffib(n): ifn==1orn==2: return1 a,b=1,1 foriinrange(2,n): a,b=b,a+b returnb
我稍微解释三点:
- 为啥是 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)
杨辉三角
同样,先写递归写法(我这里不考虑特殊情况了,时间有限):
defYH_tri(a,b): ifa==borb==0: return1 else: returnYH_tri(a-1,b)+YH_tri(a-1,b-1)
老铁们自己先想想该怎么写??
总结
以上所述是小编给大家介绍的提升Python效率之使用循环机制代替递归函数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。