C++如何实现斐波那契数列_C++动态规划与递归解法对比

admin 百科 14
斐波那契数列可通过递归和动态规划实现,递归法代码简洁但时间复杂度为O(2^n),存在大量重复计算,适用于小n;动态规划通过保存中间结果避免重复计算,时间复杂度降为O(n),空间优化版本仅用O(1)空间,适合大n场景。

C++如何实现斐波那契数列_C++动态规划与递归解法对比-第1张图片-佛山资讯网

斐波那契数列是经典的数学问题,其定义为:F(0) = 0, F(1) = 1,且当 n ≥ 2 时,F(n) = F(n-1) + F(n-2)。在 C++ 中,可以通过递归和动态规划两种常见方式实现。下面分别介绍这两种方法,并对比它们的效率与适用场景。

递归解法(简单但低效)

最直观的实现方式是使用递归:

#include <iostream>
using namespace std;
<p>int fib_recursive(int n) {
if (n <= 1)
return n;
return fib_recursive(n - 1) + fib_recursive(n - 2);
}</p><p>int main() {
int n = 10;
cout << "F(" << n << ") = " << fib_recursive(n) << endl;
return 0;
}</p>

登录后复制

说明:该方法代码简洁,逻辑清晰,但存在大量重复计算。例如,计算 F(5) 时会重复计算 F(3) 多次。时间复杂度为 O(2^n),空间复杂度为 O(n)(由于递归调用栈),不适合求较大的 n。

动态规划解法(高效推荐)

为了避免重复计算,可以使用动态规划(DP),将已计算的结果保存起来:

立即学习“C++免费学习笔记(深入)”;

#include <iostream>
using namespace std;
<p>int fib_dp(int n) {
if (n <= 1)
return n;</p><pre class='brush:php;toolbar:false;'>int* dp = new int[n + 1];
dp[0] = 0;
dp[1] = 1;

for (int i = 2; i <= n; ++i) {
    dp[i] = dp[i - 1] + dp[i - 2];
}

int result = dp[n];
delete[] dp;
return result;

登录后复制

}

标签: ai c++ ios stream

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~