斐波那契数列非递归C语言竟暗藏这般玄机

发布时间:2026/9/17 21:07:12

斐波那契数列非递归C语言竟暗藏这般玄机 /*前边两个为一种做法*//*后边有另外的做法差分方程以及利用矩阵去做*/这段内容似乎并不是一个完整的句子类型, 它看起来像是代码中的注释分隔符重复罗列, 不太明确你具体要求改写什么, 如果是要对这样的形式进行“改写式玩弄”, 可以这样: //***************************************************, //***************************************************, //***************************************************。但感觉这样意义不大, 你可以进一步明确下需求。第一种做法这是题目, 属于2018王道数据结构考研复习指导, 是第一章思维拓展方面的。关于斐波那契数列的简介如此这般一个数列, 即0、1、1、2、3、5、8、13、21、34、……它被叫做斐波那契数列, 又被称作黄金分割数列 , 在数学范畴里, 斐波纳契数列是通过这样一种被以递归方式进行定义的: F0等于0, F1等于1, Fn等于F(n - 1)加上F(n - 2)n大于或等于2, n属于正整数, 在现代物理、准晶体结构、化学等诸多领域, 斐波纳契数列均存在直接的应用, 鉴于此, 美国数学会自1963年起出版了一份名为《斐波纳契数列季刊》的数学杂志, 用以专门刊载这方面的研究成果。具体题目得出斐波那契数列的F(n)存有两种常用算法为: 递归算法以及非递归算法, 去剖析两种算法的时间复杂度。1.递归算法1#include2usingnamespacestd;34longFibonacci(intn) {5if(n 0)6return0;7elseif(n 1)8return1;9else10returnFibonacci(n -1) Fibonacci(n-2);11}1213intmain() {14cout Enter an integer number:endl;15intN;16cin N;17cout Fibonacci(N) endl;18system(pause);19return0;20}时间复杂度分析对于求解F(n), 要算出它, 必定得先去计算F(n - 1)以及F(n - 2) , 而计算F(n - 1)和F(n - 2) , 又一定得先计算F(n - 3)和F(n - 4) , 并且不断这样类推下去 , 一直到一定得先计算F(1)和F(0) , 之后再通过逆推得出F(n - 1)和F(n - 2)的结果 , 进而得到F(n) , 但这样会计算诸多重复的值 , 在时间方面造成了极大的浪费 , 算法的时间复杂度随同N的增大呈现指数式的增长 , 时间的复杂度为O(2^n) , 也就是2的n次方。2.非递归算法1#include2usingnamespacestd;34longFibonacci(intn) {5if(n 2)6return1;7else{8longnum1 1;9longnum2 1;10for(inti 2;i n -1;i) {11num2 num1 num2;12num1 num2 -num1;13}14returnnum1 num2;15}16}1718intmain() {19cout Enter an integer number:endl;20intN;21cin N;22cout Fibonacci(N) endl;23system(pause);24return0;25}时间复杂度分析从大于二的n开始着手计算 , 借助F( n - 1)以及F( n - 2)这两个数进行相加以得出结果 , 如此这般便规避了大量的重复计算 , 其效率相较于递归算法要快出许多 , 算法的时间复杂度与n成正比例关系 , 也就是算法的时间复杂度为O( n )。第二种做法。应用网址斐波那契数列, f(n)等于f(n减1)加上f(n减2), n大于或等于2。f(0)0; f(1)1;即有名的兔子繁衍问题。斐波那契数列共有三种解法因而写这篇文章总结一下。1. 递归求解递归求解比较简单是大家常见的一种解法。1intfibonacci(intn)2{3coutcalculatingendl;4if(n0) {5return0;6}7if(n1) {8return1;9}10returnfb(n-1)fb(n-2);11}关于这种解法不再赘述下面主要说下时间复杂度分析。设有一个函数f(n), 它是当参数为n的时候的时间复杂度, 存在这样一种情况非常明显地可以看到: f(n)等于f(n减1)加上f(n减2)。这就转化为了数学上的二阶常系数差分方程并且为其次方程。于是就转化成了求解f(n)的值的情况, f(n)等于f(n - 1)加上f(n - 2), 并且f(0)的取值是0, f(1)的取值是1。特征方程为x^2-x-10得 x(1±√5)/2因而f(n)的通解为:由f(0)0; f(1)1可解得c_1c_2最终可得时间复杂度为第一种解法具备相对简单的特性, 然而会出现多个元素被重复进行计算的状况, 所以时间复杂度在程度方面较高, 为了达成避免重复计算这一目标, 可以通过开展循环计算的方式来降低时间复杂度。1intFibonacci(intn) {2if(n0) {3return0;4}5if(n1) {6return1;7}8intmin0;9intmax1;10inti2;11intresult0;12while(in) {13resultminmax;14minmax;15maxresult;16i;17} return result; }第二种算法时间复杂度为O(n)3. 还有一种时间复杂度更低的算法。根据上面的递归公式我们可以得到所以呢, 计算f(n)就被简化了, 简化成了计算矩阵的(n-2)次方, 然而计算矩阵的那(n-2)次方时, 我们能够进一步去做分解, 也就是计算矩阵(n-2)/2次方的平方, 而且还能一步步地持续分解下去, 鉴于采用折半的方式去计算矩阵次方, 所以时间复杂度是O(log n)。具体代码实现如下1//2//main.cpp3//fibonaccimatrix4//5//Created by shunagao on 15/8/31.6//Copyright © 2015年 shunagao. All rights reserved.7//89#include10usingnamespacestd;1112classMatrix13{14public:15intn;16int**m;17Matrix(intnum)18{19mnewint*[num];20for(inti0; i) {21m[i]newint[num];22}23nnum;24clear();25}26voidclear()27{28for(inti0; ii) {29for(intj0; jj) {30m[i][j]0;31}32}33}34voidunit()35{36clear();37for(inti0; ii) {38m[i][i]1;39}40}41Matrixoperator(constMatrix mtx)42{43Matrix(mtx.n);44for(inti0; ii) {45for(intj0; jj) {46m[i][j]mtx.m[i][j];47}48}49return*this;50}51Matrixoperator*(constMatrix mtx)52{53Matrix result(mtx.n);54result.clear();55for(inti0; ii) {56for(intj0; jj) {57for(intk0; kk) {58result.m[i][j]m[i][k]*mtx.m[k][j];59}60}61}62returnresult;63}64};65intmain(intargc,constchar*argv[]) {66unsignedintnum2;67Matrix first(num);68first.m[0][0]1;69first.m[0][1]1;70first.m[1][0]1;71first.m[1][1]0;72intt;73cint;74Matrix result(num);75result.unit();76intnt-2;77while(n) {78if(n%2) {79resultresult*first;80}81firstfirst*first;82nn/2;83}84cout(result.m[0][0]result.m[0][1])endl;85return0;86}
延伸阅读

更多相关文章

2026/9/17 1:54:14

Python读取邮件附件?这招绝了,老板看了都直呼内行

SMTP 用于发送邮件, 是个功能强大又实用的模块, 它能帮我们以简单且优雅的方式来发送邮件, 不管是发送 HTML 格式的邮件, 还是发送带附件的邮件, 亦或是在 HTML 文本里添加图片, SMTP 发送邮件都给出了便捷的解决办法, 本文会介绍怎样使用 SMTP 发送邮件, 还会展示一些供参考的…

2026/9/17 11:46:39

python iteritems Python iteritems早废了!Linux老炮儿还在用命令行硬扛?

从Linux用户的角度来讲, 我们已然对命令行操作极为熟悉了。和别的流行操作系统不一样, 于Linux社区内, 把使用命令行跟运用图形用户界面去执行类似任务做比较, 命令行往往能够给予更为优雅且更为有效的解决办法。逐渐地 Linux 社区对于命令行有着的依赖持续增长, UNIX shell 像…

2026/9/11 20:52:55

Python排序文件按时间?这招绝了,别再傻傻手动翻

其中一种高级解释型编程语言, 是全世界作编程工作的人员都在运用的。它最为知名的方面, 是面向对象编程。我们能够于跟人工智能、机器学习、Web开发以及数据分析相关联的各异IT领域当中加以运用, 它流行且实用的另外理由是其具备诸多内置的库还有模块。怎样对日期以及时间进行排…

2026/9/17 21:05:37

运动服饰供应链的材料科学驱动范式

简介:本资源是一份聚焦运动服饰品牌战略的深度行业研究报告,面向轻工制造与纺织服装领域的投资者、企业战略管理者及行业研究者,旨在解析Lululemon崛起背后的可复用经营逻辑,并为本土品牌发展与投资决策提供实操参考。报告全文21页…

2026/9/17 21:05:37

Vending-Bench 2 跑 GPT-6 Astra,Key 走 TaoToken 能复现 Agent 评测吗?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/17 21:05:37

douyin-downloader 实战教程:4 步完成抖音去水印批量下载

douyin-downloader 实战教程:4 步完成抖音去水印批量下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…

2026/9/17 21:05:37

ARM9+Linux嵌入式诊断系统在机车走行部的实时性与抗干扰设计

简介:本资源是一篇发表于《机车电传动》2010年第2期的专业技术论文,面向嵌入式系统开发者、铁路装备研发工程师及自动化专业高年级本科生/研究生,聚焦机车走行部智能故障诊断这一工业安全痛点。论文完整阐述了基于ARM9嵌入式Linux平台的故障诊…

2026/9/17 21:05:37

小智语音音频队列满:丢旧帧、拒新包与延迟伸缩

上周三半夜,我蹲在小智控制台前面盯着滚动的日志,屏幕上每隔几秒就跳出一行audio_queue full, drop_oldest1,音箱那头小智的回应一顿一顿的,像信号不好的收音机。当时我的第一反应是网络又抽风了,抓包看了一圈才发现&a…

2026/9/17 21:00:37

Windows下Docker Desktop部署One-API,让扣子COZE接入DeepSeek

最近接了个挺有意思的需求:团队想在扣子(COZE)上搭业务智能体,底下的模型统一换成DeepSeek,但环境是Windows,又要走Docker Desktop,一个都不能少。一开始我也被"安装扣子COZE"这个说法…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/17 0:03:13

WiFi密码安全测试:从原理到实战的字典暴力破解指南

1. 写在前面:我为什么要研究WiFi密码这件事先交代一下背景。我身边有不少朋友,家里的WiFi密码常年是"12345678"或者"88888888",问就是"好记"。直到有一次,隔壁邻居蹭网蹭到我家路由器后台都进不去&…

2026/9/17 0:03:13

redis-py服务控制与监控函数实战:从ping到slowlog的巡检指南

我用 redis-py 写了快五年的业务代码,坦白说,真正让我觉得这个客户端“像一个成熟工具箱”的,不是 get/set 那套基本操作,而是它那批专门做服务控制与状态监控的辅助函数。日常开发里,大家把redis.Redis(host..., deco…

2026/9/17 0:03:13

SpringBoot+Vue3实现中小企业设备管理系统开发实践

1. 项目概述与核心价值中小企业设备管理系统是制造业、服务业等领域的基础信息化工具。传统设备管理往往依赖Excel表格或纸质记录,存在数据孤岛、流程混乱、维护成本高等痛点。这套基于Java SpringBootVue3MyBatis的技术方案,通过前后端分离架构实现了设…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码