用数组求斐波那契数列
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用数组求斐波那契数列
用数组求斐波那契数列
斐波那契数列是指依次每个数等于前两个数之和的数列,其前几项为1,1,2,3,5,8,13……本文将介绍使用数组的方法来求解斐波那契数列。
一、使用递归来求解斐波那契数列
最简单的方法莫过于使用递归来求解斐波那契数列了,但是递归的方法存在严重的效率问题,当时数组较大时递归的深度会非常大,导致程序性能极差。
代码如下:
```python
def fibonacci(n):
if n<2:
return n
return fibonacci(n-1)+fibonacci(n-2)
```
上述代码使用了递归的方法求解斐波那契数列,当n小于2时直接返回n,否则分别递归求解前两个数之和。
二、使用数组来求解斐波那契数列
由于递归产生的性能问题,我们可以使用更加高效的方法来求解斐波
那契数列——使用数组。
代码如下:
```python
def fibonacci(n):
if n<2:
return n
arr=[0]*n
arr[0]=1
arr[1]=1
for i in range(2,n):
arr[i]=arr[i-1]+arr[i-2]
return arr[n-1]
```
上述代码使用了数组来求解斐波那契数列,当n小于2时直接返回n,否则创建一个长度为n的数组,设置前两个数分别为1和1,然后循环依次求解数组中每个数的值即可。
三、使用动态规划来求解斐波那契数列
动态规划是一种常用的算法,本章节将介绍如何使用动态规划来求解斐波那契数列。
代码如下:
```python
def fibonacci(n):
if n<2:
return n
arr=[0]*n
arr[0]=1
arr[1]=1
for i in range(2,n):
arr[i]=arr[i-1]+arr[i-2]
return arr[n-1]
```
上述代码使用了动态规划来求解斐波那契数列,当n小于2时直接返回n,否则创建一个长度为n的数组,设置前两个数分别为1和1,然后循环依次求解数组中每个数的值即可。
四、使用矩阵快速幂来求解斐波那契数列
矩阵快速幂是线性代数领域的一种常用算法,本章节将介绍如何使用矩阵快速幂来求解斐波那契数列。
代码如下:
```python
import numpy as np
def fibonacci(n):
if n<2:
return n
A=np.mat([[1,1],[1,0]])
V=np.mat([[1],[0]])
for i in range(n-1):
V=A*V
return V[0]
```
上述代码使用了矩阵快速幂来求解斐波那契数列,当n小于2时直接返回n,否则创建一个2x2的矩阵A,将初始向量V设置为[[1],[0]],然后循环依次计算出A^n * V即可。
总结:本文提供了四种不同的方法来求解斐波那契数列,当然还有其它方法,每种方法都有其优缺点,需要根据具体情况来选择最优的方法。