题目描述
- 现在要求输入一个整数n
- 输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
理解
- 斐波那契数列
因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
解题思路
解法1
按照斐波纳契数列的定义写递归程序
class Solution:
def Fibonacci(self, n):
if n<=0:
return 0
elif n == 1 or n == 2:
return 1
else:
return (self.Fibonacci(n-1)+ self.Fibonacci(n-2))
但是这样写的话,在牛客网上会运行超时且容易栈溢出
解法2
不用递归怎么写呢,其实也很简单,如下
class Solution:
def Fibonacci(self, n):
if n<=0:
return 0
if n==1:
return 1
else:
a,b=0,1
for i in range(n-1):
a,b=b,a+b
return b
或者用列表实现
class Solution:
def Fibonacci(self, n):
a = [0,1]
if n<=1:
return a[n]
else:
for i in range(2,n+1):
a.append(a[i-1]+a[i-2])
return a[n]