介绍
今天就跟大家聊聊有关怎么在Python中利用循环机制代替递归函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
<强>斐波那契数列强>
当年,典型的递归题目,斐波那契数列还记得吗?
def fib (n): if 才能;n==1,趁机n==2: ,,,return 1 其他的才能: ,,,return fib (n - 1) + fib (n - 2)
当然,为了程序健壮性,加上<代码>,试一试…除了…代码>
def fib (n): if 才能isinstance (n, int): ,,,print(& # 39;兄弟,输入正整数哈& # 39;) ,才能返回 尝试才能: ,,,if n==1,趁机n==2: ,,,,,return 1 ,,,elif n & lt;=, 0: ,,,,,印刷(& # 39;兄弟别输入0或负数呀& # 39;) ,,,: ,,,,,return fib (n - 1) + fib (n - 2) except 才能;RecursionError: ,,,print(& # 39;兄弟,超过了最大递归深度& # 39;
是的,无论时间还是空间复杂度,递归真的是不太好使哈!这是递归的写法:
def fib (n): if 才能;n==1,趁机n ==, 2: ,,,return 1 ,,,b =1,, 1 for 才能小姐:拷贝范围(2,,n): ,,,,,b =, b, a + b return 才能;b
我稍微解释三点:
- <李>
为啥是<代码>,范围(2 n)> 代码,因为,斐波那契数列从,1开始,所以,fib (n)就是数列的第,n项,
李> <李>由于前两项都为,1,所以要少两项,为,<代码>范围(2 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 或是b ==, 0: ,,,return 1 其他的才能: ,,,return YH_tri (a - 1, b) + YH_tri (a - 1, b - 1)
看完上述内容,你们对怎么在Python中利用循环机制代替递归函数有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。