斐波那契数列(C++)

本文介绍了如何使用C++编写计算斐波那契数列的递归程序,根据提示,程序可处理不超过35的输入值。示例中,当输入为6时,输出为5。解决此问题的递归公式为js(a)=js(a-1)+js(a-2)。同时,文章也提到了记忆化搜索作为优化递归的一种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description
斐波那切数列0,1,1,2,3,5,8,13,21,34,55……从第三项起,每一项都是紧挨着的前两项的和。写出计算斐波那切数列的任意一个数据项递归程序

Input
输入一个数字N,N<=35

Output
如题

Sample Input

6

Sample Output

5

HINT

这是一道简单的递归题,递归式很明显是js(a)=js(a-1)+js(a-2),有了递归式就十分好做了,下面看代码:

#include <bits/stdc++.h>
using namespace std;
int js(int n) {
   
   
	if(n==1) {
   
   
		return 0;
	}
	if
【问题描述】 【问题描述】编写函数f,功能是用递归的方法求斐波那契数列的第n项,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f求出斐波那契数列的第n项,并在主函数中输出。 斐波那契数列1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法求斐波那契数列的第n项,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f求出斐波那契数列的第n项,并在主函数中输出。 斐波那契数列1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法求斐波那契数列的第n项,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f求出斐波那契数列的第n项,并在主函数中输出。 斐波那契数列1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法求斐波那契数列的第n项,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f求出斐波那契数列的第n项,并在主函数中输出。 斐波那契数列1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 斐波那契数列1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8
以下是几种常见的 C++ 实现斐波那契数列的方法: ### 方法一:递归实现 通过递归函数调用来计算斐波那契数列中的某一项。这种方法简单直观,但由于重复计算较多,在数值较大时效率较低。 ```cpp #include <iostream> using namespace std; int fib(int n) { if (n <= 1) { return n; } else { return (fib(n-1) + fib(n-2)); } } int main() { int n; cout << "请输入需要计算的斐波那契数列项数: "; cin >> n; cout << "第 " << n << " 项斐波那契数是: " << fib(n) << endl; return 0; } ``` 此方法基于定义直接实现了斐波那契数列[^1]。 --- ### 方法二:迭代实现 利用循环逐步累加的方式来计算斐波那契数列,相比递归更加高效,时间复杂度为 O(n),空间复杂度为 O(1)。 ```cpp #include <iostream> using namespace std; long long fib_iterative(int n) { if (n <= 1) return n; long long prev = 0, curr = 1; for (int i = 2; i <= n; ++i) { long long next = prev + curr; prev = curr; curr = next; } return curr; } int main() { int n; cout << "请输入需要计算的斐波那契数列项数: "; cin >> n; cout << "第 " << n << " 项斐波那契数是: " << fib_iterative(n) << endl; return 0; } ``` 该方法避免了递归带来的栈开销,适合用于较大的输入值[^3]。 --- ### 方法三:数组存储法 预先计算并保存整个序列到某个范围内的所有值,适用于多次查询的情况。虽然占用更多内存,但在某些场景下可以提高性能。 ```cpp #include <bits/stdc++.h> #define MAXN 1000 using namespace std; int fibn[MAXN]; int main() { fibn[1] = fibn[2] = 1; for (int i = 3; i < MAXN; ++i) { fibn[i] = fibn[i - 1] + fibn[i - 2]; } int n; cin >> n; cout << fibn[n] << endl; return 0; } ``` 上述代码展示了如何预处理大量斐波那契数以便快速访问任意位置的结果。 --- ### 总结 以上三种方法各有优劣: - **递归**易于理解但效率低下; - **迭代**兼顾简洁性和高性能; - **数组存储**则更适合频繁读取需求下的优化方案。 #### 注意事项 对于非常大的 `n` 值(如超过 90),由于整型溢出问题可能导致错误结果。因此建议改用更大容量的数据类型(例如 `unsigned long long` 或者借助高精度库)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值