动态规划实现斐波那契数列
时间: 2023-10-13 17:21:43 浏览: 51
动态规划实现斐波那契数列可以通过定义一个数组来存储计算过程中的中间结果,从而避免重复计算。具体实现如下:
```python
def fibonacci(n):
if n <= 1:
return n
fib = [0] * (n+1)
fib[1] = 1
for i in range(2, n+1):
fib[i] = fib[i-1] + fib[i-2]
return fib[n]
```
这里定义了一个长度为 n+1 的数组 fib,其中 fib[i] 表示第 i 个斐波那契数列的值。初始化 fib[1] 为 1,然后从第 2 个位置开始,通过 fib[i-1] 和 fib[i-2] 的值计算出 fib[i] 的值,避免了重复计算。
这样的时间复杂度为 O(n),空间复杂度为 O(n)。如果只需要计算一个斐波那契数列的值,可以将空间复杂度优化为 O(1)。
相关问题
动态规划实现斐波那契数列原理
斐波那契数列是一个经典的动态规划问题。动态规划是一种通过将原问题分解成子问题来求解复杂问题的方法,它通常用于求解最优化问题。
斐波那契数列的递推公式为:
F(n) = F(n-1) + F(n-2)
其中,F(0) = 0,F(1) = 1。
根据递推公式,我们可以使用动态规划来求解斐波那契数列。具体实现如下:
1. 定义一个数组f,用来保存斐波那契数列的值。
2. 初始化数组f,将f[0]赋值为0,将f[1]赋值为1。
3. 从2开始,计算f[i] = f[i-1] + f[i-2],直到计算出f[n]为止。
4. 返回f[n]的值。
这个实现方法的时间复杂度为O(n),因为需要计算n个斐波那契数。这个算法的空间复杂度为O(n),因为需要使用一个数组来保存斐波那契数列的值。
下面是一个简单的Python代码实现:
```
def fibonacci(n):
f = [0, 1]
for i in range(2, n+1):
f.append(f[i-1] + f[i-2])
return f[n]
```
这个代码实现中,我们使用了一个列表f来保存斐波那契数列的值。在循环中,我们从2开始计算每个斐波那契数,并将其添加到列表f中。最后,我们返回f[n]的值,即第n个斐波那契数。
动态规划求斐波那契数列C语言实现
动态规划求解斐波那契数列的C语言实现如下:
```c
#include <stdio.h>
int fib(int n) {
int f[n + 1];
f[0] = 0;
f[1] = 1;
for (int i = 2; i <= n; i++) {
f[i] = f[i - 1] + f[i - 2];
}
return f[n];
}
int main() {
int n;
printf("请输入n:");
scanf("%d", &n);
printf("斐波那契数列第%d项为%d\n", n, fib(n));
return 0;
}
```
在这个程序中,我们定义了一个`fib`函数用来求解斐波那契数列的第`n`项。我们使用了一个数组`f`来保存斐波那契数列的前`n`项。由于斐波那契数列的定义是`f(n) = f(n-1) + f(n-2)`,因此我们可以通过迭代的方式计算出斐波那契数列的每一项。最后,我们通过调用`fib`函数并输出结果来得到斐波那契数列的第`n`项。