方法一:使用递归
(但是在leetcode里不能执行成功,因为我不会在类中调用自身递归,所以我是在jupyter notebook中操作的)
def fib( n):
if(n == 0):
return 0
elif(n == 1):
return 1
else:
return fib(n-1)+fib(n-2)
调用:
fib(30)
运行结果:
方法二:(不使用递归)
把a、b、c分别看做三个指针依次往后挪,例如a,当a在最前面时,a = b +c,此时b在最前面,b = a+c,以此类推:
class Solution:
def fib(self, n: int) -> int:
if(n == 0):
return 0
elif(n == 1 or n == 2):
return 1
a = 0
b = 1
c = 1
for i in range(2,n):
if(c>a and c>=b): ## 判断当前哪个数在最前面(最前面的最小)
a = b+c
elif(a>c and a>b):
b = a+c
elif(b>a and b>c):
c = a+b
if(a>b and a>c):
return a
elif(b>a and b>c):
return b
else:
return c
提交通过: