用递归的方法计算第一百个斐波那契数列,C++实现,解决数组溢出,不用gmp库
时间: 2024-09-13 17:18:35 浏览: 46
在C++中,使用递归方法计算斐波那契数列的一个简单实现如下:
```cpp
#include <iostream>
// 递归计算斐波那契数列
long long fibonacci(int n) {
if (n <= 1) {
return n;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
int main() {
int n = 100;
std::cout << "The " << n << "th Fibonacci number is " << fibonacci(n) << std::endl;
return 0;
}
```
然而,上述递归实现对于较大的`n`值(如100)会导致非常严重的性能问题,因为它会重复计算许多子问题。此外,由于递归深度的限制,当`n`达到一定值时会发生栈溢出。
为了有效地计算第一百个斐波那契数并且避免数组溢出的问题,我们可以使用循环代替递归,并使用一个数组来存储已经计算过的斐波那契数,这种方法称为动态规划。下面是一个使用循环和数组来计算第一百个斐波那契数的示例:
```cpp
#include <iostream>
#include <vector>
// 动态规划计算斐波那契数列
long long fibonacci(int n) {
std::vector<long long> fib(n + 1);
fib[0] = 0;
fib[1] = 1;
for (int i = 2; i <= n; ++i) {
fib[i] = fib[i - 1] + fib[i - 2];
}
return fib[n];
}
int main() {
int n = 100;
std::cout << "The " << n << "th Fibonacci number is " << fibonacci(n) << std::endl;
return 0;
}
```
这个实现在计算第一百个斐波那契数时不会出现溢出问题,因为`long long`类型在大多数现代编译器中的大小是64位,足以存储如此大的数值。
阅读全文