信息学奥赛一本通1159:斐波那契数列

本文介绍了如何使用递归函数解决信息学奥赛一本通中的1159题——斐波那契数列。详细解释了递归函数的设计思路,包括定义函数、设置递归出口和操作,并给出了完整的C++代码实现。
部署运行你感兴趣的模型镜像

【题目描述】

用递归函数输出斐波那契数列第n项。0, 1,1,2,3,5,8,13……

【输入】

一个正整数n,表示第n项。

【输出】

第n项是多少。

【输入样例】

3

【输出样例】

1

大家好!

今天我们来看信息学奥赛一本通刷题网站的1159题:斐波那契数列;下面是网站链接:信息学奥赛一本通(C++版)在线评测系统

这道题要求我们输入一个数字,我们就先假设为n, 然后再输出在斐波那契数列中第n项的值  比如输入3输出的就是1 (有一点我需要说一下,就是这道题它的样例是按照以0开头的斐波那契数列来写的,所以我们在编程的时候也要按照样例的格式来写)

首先我们肯定要先定义一个自定义函数,里面有一个参数n,代表了我们要输出斐波那契数列的第几项。因为这道题目是需要用递归来写,所以我下面的代码是写的递归形式。然后呢,递归第一步要分析正常是我们是怎么做的,第二步是设置递归出口的判断条件,第三步是设置出口的操作,表示不再递归了。所以把这套“递归三部曲”套路套到这道题上,自定义函数的部分就出来了。代码如下:

long long f(int n){
	if(n==1) return 0;
	if(n==2||n==3) return 1;
	else
	return f(n-1)+f(n-2);
}

自定义函数部分写好了主函数部分也就简单了,声明一个整型的a变量(其他的名字也可,但尽量不要与自定义函数部分的n一样),然后输入a,由于斐波那契数列的自定义函数是有返回值的,所以直接cout<<f(k);即可。代码如下:

int  main(){
	int k; 
	cin>>k;
	cout<<f(k);
	return 0;
}

完整代码如下:

#include<bits/stdc++.h>
using namespace std;
long long f(int n){
	if(n==1) return 0;
	if(n==2||n==3) return 1;
	else
	return f(n-1)+f(n-2);
}
int  main(){
	int k; 
	cin>>k;
	cout<<f(k);
	return 0;
}

 

您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

### 关于C++实现斐波那契数列信息学奥赛题目解析 在信息学竞赛中,斐波那契数列是一个常见的算法练习题。这类问题常考察选手对于递归、迭代以及动态规划的理解。 #### 解题思路 解决斐波那契数列计算的问题有多种方法: - **递归法**:最直观的方法是过定义函数`fib(n)`来表示第n项的值等于前两项之和。然而这种方法存在大量重复计算,在大数据量下效率极低[^1]。 - **记忆化搜索(带缓存的递归)**:为了避免上述递归方式中的冗余运算,可以在每次调用时保存已经求得的结果,下次遇到相同参数直接返回之前存储的答案,从而大大提高性能[^2]。 - **循环迭代**:采用自底向上的方式进行累加更新两个相邻变量直到达到目标位置,此做法时间复杂度为O(n),空间上只需要常数级别的额外内存即可完成操作[^3]。 - **矩阵快速幂优化**:利用线性代数的知识可以进一步加速大范围内的查询速度,特别是当输入规模非常庞大时尤为有效[^4]。 下面给出基于简单迭代版本的一个具体实例代码如下所示: ```cpp #include <iostream> using namespace std; int fibonacci(int n) { if (n <= 0) return 0; int a = 0, b = 1, c; while (--n >= 0){ c = a + b; a = b; b = c; } return a; } int main() { int num; cout << "请输入要计算的斐波那契序列的位置:"; cin >> num; cout << "Fibonacci("<<num<<") = "<< fibonacci(num)<< endl; } ``` 该程序实现了非负整数范围内任意指定索引处对应数值的有效获取功能,并且具有较好的执行效能表现。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值