用c++写斐波那契数列
时间: 2023-05-23 09:02:12 浏览: 93
以下是用 C 语言写的斐波那契数列代码:
```
#include <stdio.h>
int fibonacci(int n) {
int a = 0, b = 1, c, i;
if (n == 0)
return a;
for (i = 2; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}
int main() {
int n, i;
printf("请输入要求第几个斐波那契数:");
scanf("%d", &n);
printf("第%d个斐波那契数是:%d", n, fibonacci(n));
return 0;
}
```
相关问题
用C++写斐波那契数列
在C++中,斐波那契数列是一个经典的递归或循环计算问题。下面是一个简单的递归版本的实现:
```cpp
#include <iostream>
// 使用递归方式计算斐波那契数列
int fibonacci(int n) {
if (n <= 0) return 0;
else if (n == 1 || n == 2) return 1; // 基本情况:前两个数字
else return fibonacci(n - 1) + fibonacci(n - 2); // 递归调用
}
int main() {
int num_terms;
std::cout << "请输入要计算的斐波那契数列项数: ";
std::cin >> num_terms;
std::cout << "斐波那契数列的前 " << num_terms << " 项是:\n";
for (int i = 0; i < num_terms; ++i) {
std::cout << fibonacci(i) << " ";
}
return 0;
}
```
这是一个基本的递归实现,但对于大的`n`值,由于递归效率较低,可能会导致性能问题。为了避免这个问题,可以使用动态规划的技巧,将中间结果存储起来,如下面所示的迭代版本:
```cpp
#include <iostream>
#include <vector>
// 使用迭代方式计算斐波那契数列
std::vector<int> fibonacci_iterative(int n) {
std::vector<int> fib(n);
fib[0] = 0;
fib[1] = 1;
for (size_t i = 2; i < n; ++i) {
fib[i] = fib[i - 1] + fib[i - 2];
}
return fib;
}
int main() {
int num_terms;
std::cout << "请输入要计算的斐波那契数列项数: ";
std::cin >> num_terms;
std::vector<int> result = fibonacci_iterative(num_terms);
std::cout << "斐波那契数列的前 " << num_terms << " 项是:\n";
for (const auto& num : result) {
std::cout << num << " ";
}
return 0;
}
```
这个迭代版本的时间复杂度为O(n),更适合处理较大的输入。
用C++写Fibonacci数列
在C++中,Fibonacci数列是一个经典的递归问题,也可以通过循环的方式来计算,以下是两种常见的实现方法:
1. **递归实现**:
```cpp
#include <iostream>
int fibonacci(int n) {
if (n <= 1)
return n;
else
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main() {
int num_terms = 10; // 请求的斐波那契数列项数
std::cout << "First " << num_terms << " Fibonacci numbers:\n";
for (int i = 0; i < num_terms; ++i) {
std::cout << fibonacci(i) << " ";
}
return 0;
}
```
注意:递归法虽然简洁,但对于大数值可能会有性能问题,因为它会重复计算很多相同的值。
2. **迭代实现**(更高效):
```cpp
#include <iostream>
int fibonacci(int n) {
if (n <= 1)
return n;
int t1 = 0, t2 = 1, nextTerm = 0;
for (int i = 2; i <= n; ++i) {
nextTerm = t1 + t2;
t1 = t2;
t2 = nextTerm;
}
return nextTerm;
}
int main() {
int num_terms = 10;
std::cout << "First " << num_terms << " Fibonacci numbers:\n";
for (int i = 0; i < num_terms; ++i) {
std::cout << fibonacci(i) << " ";
}
return 0;
}
```
这里我们使用了两个变量`t1`和`t2`分别保存前两个数,然后在每次循环中更新它们,避免了重复计算。
阅读全文