提升Python效率——用循环机制代替递归函数
斐波那契数列
当年,典型的递归题目,斐波那契数列还记得吗?
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)
杨辉三角
写一个函数,求杨辉三角形,第i行,第j列的值
fun(0, 0) = 1
fun(5, 2) = 10
同样,先写递归写法(我这里不考虑特殊情况了,时间有限):
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)老铁们自己先想想该怎么写??
相关推荐
大地飞鸿 2020-11-12
steeven 2020-11-10
Tips 2020-10-14
nongfusanquan0 2020-08-18
yedaoxiaodi 2020-07-26
夜晚00 2020-07-03
hanyujianke 2020-06-28
xhao 2020-06-28
清溪算法君老号 2020-06-27
pengkingli 2020-06-25
yishujixiaoxiao 2020-06-25
Masimaro 2020-06-21
清溪算法 2020-06-21
oXiaoChong 2020-06-20
RememberMePlease 2020-06-17
chaigang 2020-06-13