c++分治策略求解斐波那契数列
时间: 2025-05-19 18:53:10 浏览: 18
### C++ 分治法实现斐波那契数列
分治算法的核心思想是将一个问题分解成若干个小问题分别解决,最终合并子问题的结果得到原问题的解。对于斐波那契数列而言,可以利用记忆化递归的方式来减少重复计算,从而提高效率。
以下是基于分治策略并结合动态规划思想优化后的 C++ 示例代码:
```cpp
#include <iostream>
#include <unordered_map>
using namespace std;
class Solution {
public:
unordered_map<int, long long> memo; // 存储已经计算过的值
long long fib(int n) {
if (n == 0) return 0;
if (n == 1 || n == 2) return 1;
// 如果已经有该值,则直接返回
if (memo.find(n) != memo.end()) {
return memo[n];
}
// 否则继续递归计算,并存储到哈希表中
memo[n] = fib(n - 1) + fib(n - 2);
return memo[n];
}
};
int main() {
Solution sol;
int n;
cout << "请输入要查询的斐波那契数位置: ";
cin >> n;
cout << "第 " << n << " 项的值为: " << sol.fib(n) << endl;
return 0;
}
```
#### 解析
上述代码实现了带记忆化的分治方法来求解斐波那契数列中的某一项。具体说明如下:
- 使用 `unordered_map` 数据结构保存已计算过的中间结果,避免重复计算相同的子问题[^3]。
- 当前函数调用时先检查目标值是否已经被缓存;如果存在,则直接返回缓存值,否则按照标准递推公式 \( F(n) = F(n-1) + F(n-2) \) 进行计算并将结果加入缓存[^1]。
这种方法的时间复杂度接近于线性级别 O(N),相比朴素递归版本显著降低了运行时间开销[^2]。
阅读全文
相关推荐
















