一、定义
斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、…… 。
数学递推公式:
f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)
二、递归解法
def fibonacci(n):
if n <= 0:
return "输入应为正整数"
elif n == 1:
return 0
elif n == 2:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
n=int(input("请输入n的值:"))
print(fibonacci(n))
三、动态规划
分析:
假设n=6
列表初始状态:
ls=[0,0,0,0,0,0]
状态(i)\列表元素(ls) | 0 | 1 | 2 | 3 | 4 | 5 |
0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 0 |
2 | 0 | 1 | 0 | 0 | 0 | 0 |
3 | 0 | 1 | 1 | 0 | 0 | 0 |
4 | 0 | 1 | 1 | 2 | 0 | 0 |
5 | 0 | 1 | 1 | 2 | 3 | 0 |
6 | 0 | 1 | 1 | 2 | 3 | 5 |
状态转移方程:ls[i]=ls[i-1]+ls[i-2]
def fibonacci(n):
dp = [0] * n
dp[0] = 0
dp[1]=1
for i in range(2, n ):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n-1]
print(fibonacci(6))