斐波那契数列
当年,典型的递归题目,斐波那契数列还记得吗?
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)
老铁们自己先想想该怎么写??
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。