写出上诉两种算法以及递归算法,三种算法的优缺点
时间: 2023-07-10 19:13:01 浏览: 80
递归算法的优缺点.doc
以下是两种动态规划算法和递归算法的实现代码以及优缺点分析:
1. 动态规划算法1(Fib2)
```c++
int dp[MAX]; //所有元素初始化为0
int Fib2(int n)
{
dp[1] = dp[2] = 1;
for (int i = 3; i <= n; i++)
dp[i] = dp[i - 1] + dp[i - 2];
return dp[n];
}
```
该算法使用一个数组来保存中间结果,避免了重复计算,时间复杂度为O(n),空间复杂度为O(n)。优点是计算速度快,缺点是需要额外的空间来保存中间结果,对于大数据量的计算可能会占用较多的内存。
2. 动态规划算法2(Fib3)
```c++
int Fib3(int n)
{
int dp[3];
dp[1] = 1;
dp[2] = 1;
for (int i = 3; i <= n; i++)
dp[i % 3] = dp[(i - 2) % 3] + dp[(i - 1) % 3];
return dp[n % 3];
}
```
该算法使用一个长度为3的数组来保存最近的两个斐波那契数列的值,避免了重复计算,时间复杂度为O(n),空间复杂度为O(1)。优点是节省了空间,缺点是可读性稍差。
3. 递归算法
```c++
int Fib1(int n)
{
if (n == 1 || n == 2)
return 1;
return Fib1(n - 1) + Fib1(n - 2);
}
```
该算法使用递归的方式求解斐波那契数列,代码简单易懂,但是由于存在大量的重复计算,时间复杂度为O(2^n),效率较低。优点是代码简单易懂,缺点是效率较低,容易出现栈溢出等问题。
综上所述,动态规划算法相比于递归算法,具有时间复杂度低、效率高的优点,但需要额外的空间来保存中间结果;而递归算法虽然简单易懂,但时间复杂度高,效率低,容易出现栈溢出等问题。
阅读全文