用递归的方法计算第一百个斐波那契数列,C++实现
时间: 2024-09-13 21:17:34 浏览: 53
递归是一种在解决问题时调用自身的方法,它可以很直观地表达斐波那契数列的定义,但是直接使用递归计算斐波那契数列的第100项会遇到效率问题,因为会有大量的重复计算。为了提高效率,可以使用“记忆化”递归(也称为带缓存的递归),或者使用非递归的方法,如循环或矩阵快速幂等。下面是使用记忆化递归的一个C++实现示例:
```cpp
#include <iostream>
#include <vector>
std::vector<long long> fib_cache(101, -1); // 创建一个缓存数组,初始化为-1
long long fibonacci(int n) {
if (n <= 1) {
return n;
}
// 如果缓存中有值,则直接返回
if (fib_cache[n] != -1) {
return fib_cache[n];
}
// 否则,递归计算并存储结果到缓存中
fib_cache[n] = fibonacci(n - 1) + fibonacci(n - 2);
return fib_cache[n];
}
int main() {
std::cout << "斐波那契数列的第100项是: " << fibonacci(100) << std::endl;
return 0;
}
```
在上面的代码中,`fib_cache` 数组用于存储已经计算过的斐波那契数,以避免重复计算。当计算到某一项时,如果该值已经被计算过,直接从缓存中获取结果。这种方法将时间复杂度从指数级降低到线性级别。
阅读全文