面试现场的解决方案
这是我的笔试临场发挥,写的有点low。
def fib(n):
i,a,b = 1, 0, 1
while True:
if i < n:
a, b = b, a+b
i += 1
else:
return b
思考:循环判断条件是不是可以优化?
def fib(n):
i,a,b = 1, 0, 1
while i < n:
a, b = b, a+b
i += 1
return b
后来我又想,a, b = b, a+b
,这一步分开赋值该怎么搞,于是:
# a, b 分开赋值
def fib(n):
i,a,b = 1, 0, 1
while i< n:
temp = a + b
a = b
b = temp
i += 1
return b
# 说明:这里必须要用一个中间变量来存储新推倒出来的值: a+b
使用for循环方式
# 迭代 斐波那契
def fib(n):
a,b = 1,1
for i in range(n-2):
a,b = b, a+b
return b
使用递归方式
# 递归 斐波那契
def fib(n):
if n <= 2:
return 1
return fib(n - 1) + fib(n - 2)
Enjoy your code, good luck.