新闻中心

c++ 斐波那契数列递归 c++斐波那契算法代码

2025-11-27
浏览次数:
返回列表
斐波那契数列定义为F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2);简单递归效率低,存在大量重复计算;记忆化递归通过存储已计算值将时间复杂度降为O(n);迭代法最优,时间O(n),空间O(1),适合大数值计算。

c++ 斐波那契数列递归 c++斐波那契算法代码

斐波那契数列是一个经典的递归问题,数列定义为:第0项是0,第1项是1,从第2项开始,每一项都等于前两项之和。即:

F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2)(当 n ≥ 2)

简单递归实现

最直观的写法是使用递归函数:

#include <iostream>
using namespace std;
<p>int fibonacci(int n) {
if (n <= 1)
return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}</p><p>int main() {
int n = 10;
cout << "F(" << n << ") = " << fibonacci(n) << endl;
return 0;
}</p>

这个版本代码简洁,但效率很低,因为存在大量重复计算。例如计算 F(5) 时,F(3) 会被多次重复调用。

优化方案:记忆化递归

为了避免重复计算,可以用数组记录已经算过的值:

Motiff妙多 Motiff妙多

Motiff妙多是一款AI驱动的界面设计工具,定位为“AI时代设计工具”

Motiff妙多 334 查看详情 Motiff妙多
#include <iostream>
#include <vector>
using namespace std;
<p>int fib_memo(int n, vector<int>& memo) {
if (n <= 1)
return n;
if (memo[n] != -1)
return memo[n];
memo[n] = fib_memo(n - 1, memo) + fib_memo(n - 2, memo);
return memo[n];
}</p><p>int fibonacci_memo(int n) {
vector<int> memo(n + 1, -1);
return fib_memo(n, memo);
}</p><p>int main() {
int n = 10;
cout << "F(" << n << ") = " << fibonacci_memo(n) << endl;
return 0;
}</p>

这样每个值只计算一次,时间复杂度降到 O(n),空间换时间。

更高效的迭代方法(推荐)

虽然题目要求递归,但实际应用中迭代更高效:

#include <iostream>
using namespace std;
<p>int fibonacci_iterative(int n) {
if (n <= 1) return n;
int a = 0, b = 1, c;
for (int i = 2; i <= n; ++i) {
c = a + b;
a = b;
b = c;
}
return b;
}</p><p>int main() {
int n = 10;
cout << "F(" << n << ") = " << fibonacci_iterative(n) << endl;
return 0;
}</p>

时间 O(n),空间 O(1),适合大数值计算。

基本上就这些。递归写法容易理解,但要注意性能问题。小数据可用记忆化,大数据建议用迭代。不复杂但容易忽略效率陷阱。

以上就是c++++ 斐波那契数列递归 c++斐波那契算法代码的详细内容,更多请关注其它相关文章!


# 可以用  # 宁海网站优化报价多少  # 钦州专业网站营销推广  # seo如何看待seo  # 云浮seo优化优势  # 保山营销推广公司  # 青海seo公司案例分享  # 镇江网站建设怎么做好  # 郑州seo网站优化  # 随州抖音排名seo优化  # 青海互联网营销推广方案  # 中文网  # 相关文章  # 大数据  # 序列化  # 是一个  # 客户端  # 数据交换  # 如何使用  # 迭代  # 递归  # 递归函数  # stream  # ios  # c++  # ai 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: PySpark中从现有列右侧提取可变长度字符创建新列的教程  深入理解J*aScript中的B样条曲线与节点向量生成  荣耀Play7T运行卡顿解决_荣耀Play7T性能优化  动漫岛观看全网网 动漫岛在线正版动漫入口  Python多版本共存与虚拟环境管理深度指南  哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法  最新韩小圈网页版登录入口_官网在线观看官方链接  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】  C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用  C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用  Mac怎么锁定备忘录_Mac备忘录加密设置教程  一加Ace 6T支持全新明眸护眼:通过了最严苛的护眼小金标认证  高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法  J*aScript中如何高效提取对象指定属性  必由学官方登录入口 必由学教师学生账号快速访问  微博网页版直接访问 微博网页版账号管理快速入口  J*aScript异步迭代器_j*ascript异步遍历  Web Components中自定义开关组件状态同步的常见陷阱与解决方案  React Router 嵌套组件中 URL 重定向问题的解决方案  vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧  C++如何解决segmentation fault_C++段错误调试与原因分析  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能  解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException  深入理解J*a编译器的兼容性选项:从-source到--release  德邦快递查询平台 德邦快递物流信息查询入口  vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法  J*aScript教程:根据元素文本内容动态设置背景色  汽车之家官方网站官网入口_汽车之家网页版直接进入  2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析  小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】  sublime怎么覆盖插件的默认快捷键_sublime快捷键优先级与设置  Golang如何使用context实现超时取消_Golang context超时取消模式实践  AO3官方镜像站点汇总 AO3同人作品网页版直达链接  抖音极速版最新版本 抖音极速版官方下载地址  C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程  ArrayList与LinkedList操作复杂度详解:遍历与修改  蓝湖怎样用切图标注提对接效率_蓝湖用切图标注提对接效率【设计对接】  如何使 Jest 模拟函数默认抛出错误以提高测试效率  我的世界官方游戏入口 我的世界官网平台直达链接  动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道  uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页  C++如何操作注册表_Windows平台下C++读写注册表的API函数详解  CSS子选择器:如何区分并样式化嵌套列表的子层级  c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧  QQ网页版官方账号入口 QQ网页版网页版登录指南  c++中为什么推荐使用using替代typedef_c++现代化类型别名  Python字典中优雅地迭代剩余元素的方法  必由学网页版入口 必由学官方平台直接访问 

搜索