当前位置: 首页 > news >正文

C语言----斐波那契数列(附源代码)

      各位看官们好,当我写了上一篇博客杨辉三角后,有一些看官叫我讲一下斐波那契数列。对于这个大家应该是有了解的。最简单的规律就是f(n)=f(n-2)+f(n-1)。就是当前是前两项之和,然后下标1和0都是1.从第三项开始计算的。那么我们知道规律,那么我们就直接来讲讲如何实现和实现方法有哪些吧。

递归

        我想大家学习C语言到现在应该看到斐波那契数列应该想到的是递归吧。我想递归大家应该还知道它的核心思想吧,就是每递归一次,那么这个问题就要越靠近我们想要的答案一次,一直递归到想要答案就返回。好,那么我们现在想一想怎么搞。那么我们知道我们有特殊情况就是,如果我输入1和2的话,那么我们得到的值是1.那么我们这个就可以直接写出来哇。好当我们写出了特殊情况后,我们来思考正常情况。那么我们也知道我们规律就是前两项之和。那么我们就直接写啊,是不是。大家思考一下:


int xixi(int a)
{if (a == 1 || a == 2){return 1;}else{return xixi(a - 1) + xixi(a - 2);}
}
int main()
{int a = 0;printf("请输入要多少位的斐波那契数\n");scanf("%d", &a);printf("%d ", xixi(a));return 0;
}

        我们只要不是特殊情况的话,我们只需要在递归的时候将前两项传来,直到设定的值,那么我们就可以得到结果了。大家思考一次,是吧。代码很简单,但是有一个问题就是。递归的内存占用太多了。很有可能造成栈溢出。也许大家输入前面的数字编译器还是很快的输出的。但是当我们输入较大值如100这类的我们就可以明显的感觉速度很慢了。所以递归大家可以知道这个方法但是使用起来限制还是很大了。大家知道有这个办法就可以了。

for循环

      okok,当我们写了递归后,我们递归其实还是有点难度的,毕竟我们还是需要思考一下,怎么实现的吧。但是我们要是用for循环的,我们从最开始学习C语言的时候我们就知道有个for循环。那么最基础的知识其实是很有作用的,那么我们来思考一下for循环如何来实现我们的斐波那契数吧。但其实for循环也是比较简单的,毕竟大家思考一下。我们最基本的规律就是前两项之和f3,那么我们就创建三个变量吧。一个作为最后的相加项我们最后返回的。然后另外两个就一个作为前一项f1一个作为前两项f2。那么这个如何交换值值嘞。首先我们就最开始的时候考虑特殊情况。1和2的时候那么我们就直接从2开始吧,如果我输入的值是1或者2的话,for本来就等于2了,不执行,然后直接返回f3。那么我们可以确定了f3的初始值为1吧。并且我们现在把特殊情况也处理了。那我们正常的话f3=f1+f2。然后f2=f3。这个是为什么嘞,因为我们大家算f3,是不是就是我们的前一个f3加一个f2但我不能直接写f3的前一项啊。所以f2就成为上一个f3吧。那f2成为上一个f3那。f1自然而然的变成了上一个的f2了吧。这样大家是不是就通透了呀。我们将f1,2,3全部设为1.然后for循环从2开始那么就排除了特殊情况。然后最开始就将f3更新,然后f2和f1相继跟新这样如果下次没有更新的话,我们就可以直接确定了返回值f3了。

int xixi(int a)
{int f3 = 1;int f2 = 1;int f1 = 1;for (int y = 2; y < a; y++){f3 = f1 + f2;f1 = f2;f2 = f3;}return f3;
}
int main()
{int a = 0;printf("请输入要多少位的斐波那契数\n");scanf("%d", &a);printf("%d", xixi(a));return 0;
}

        大家需要注意一下啊。就是f1与f2更新的顺序不要乱哦。不然的话f1也变成上一个f3了。然后就太多的麻烦了。

数组

        OK呀,其实讲了上面的两个方法就差不多了的,但是我还想到了一个方法,就是我们使用数组来实现这个。那大家先想一想数组如何实现这个了。但其实啊。也很简单与我们的for循环是差不多的。我们上一个for循环是需要实时更新的,但我们数组其实就是很简单的。我们创建一个较大的数组。然后没循环一次,那么就往数组里写入新的值,然后循环到设定值结束,那么就返回这个数组下标的的元素就可以了。那么简单的思路那我们就直接开始搞吧。

int xixi(int a)
{int i = 0;int arr[100] = {0, 1,1};for (i = 2; i <= a; i++)//从第一项开始{arr[i] = arr[i - 1] + arr[i - 2];}return arr[a];}
int main()
{int a = 0;printf("请输入要多少位的斐波那契数\n");scanf("%d", &a);printf("%d", xixi(a));return 0;
}

        大家看看上面咦。为什么我们创建数组的时候开始要给0,1,1的值啊。其实也很简单就是我们数组下标啊。我们原本计算的都是从1开始的,但是我们数组是下标如果不设置得话,那么下标0为1,设置的值就会大很多,当然是越向后值就比正确值大很多。大家可以下来尝试一下。

      好了,那么我们上面三种方法就差不多了,递归方法虽然有,但是可以处理小部分递归次数较小的,如果太大了。那么就是会很慢甚至报错。建议少用用for循环的方法也可以。好了。以上就是本篇博客的内容了。如果还有补充的话,希望大家可以评论区留言。

相关文章:

C语言----斐波那契数列(附源代码)

各位看官们好&#xff0c;当我写了上一篇博客杨辉三角后&#xff0c;有一些看官叫我讲一下斐波那契数列。对于这个大家应该是有了解的。最简单的规律就是f(n)f(n-2)f(n-1)。就是当前是前两项之和&#xff0c;然后下标1和0都是1.从第三项开始计算的。那么我们知道规律&#xff0…...

javax.net.ssl.SSLException: Received fatal alert: protocol_version已经解决

起因&#xff1a; 在帮别人讲解项目时&#xff0c;将项目的tomcat配置完&#xff0c;点击运行后&#xff0c;报错&#xff0c;信息如标题。 解决办法&#xff1a; 在csdn百度问题&#xff0c;得到的方法主要有几个&#xff1a; 1.jdk要配置在1.8以上&#xff1b; 2.数据库地…...

uniapp 实现下拉刷新 下滑更新

效果图 在app或者小程序中向下滑动 会出现刷新数据 ,而上拉到底 需要更新数据 功能实现 主要俩种方式 依赖生命周期 在page.json中开启 page.json "style" : {"navigationBarTitleText" : "小小练习","backgroundTextStyle": &qu…...

海豚调度器如何看工作流是在哪个worker节点执行

用海豚调度器&#xff0c;执行一个工作流时&#xff0c;有时成功&#xff0c;有时失败&#xff0c;怀疑跟worker节点环境配置不一样有关。要怎样看是在哪个worker节点执行&#xff0c;在 海豚调度器 Web UI 中&#xff0c;您可以查看任务实例&#xff0c;里面有一列显示host&a…...

凸优化理论学习三|凸优化问题(一)

系列文章目录 凸优化理论学习一|最优化及凸集的基本概念 凸优化理论学习二|凸函数及其相关概念 文章目录 系列文章目录一、优化问题&#xff08;一&#xff09;标准形式的优化问题&#xff08;二&#xff09;可行点和最优点&#xff08;三&#xff09;局部最优点&#xff08;四…...

【Unity Shader入门精要 第7章】基础纹理补充内容:MipMap原理

1.纹理采样 我们对纹理采样进行显示的过程&#xff0c;可以理解为将屏幕上的一个像素&#xff08;下文用像素表示&#xff09;映射到纹理上的一个像素&#xff08;下文用纹素表示&#xff09;&#xff0c;然后用纹理上的这个像素的颜色进行显示。 理想情况下&#xff0c;屏幕…...

JeeSite Vue3:前端开发页面如何动态设置菜单展示模式?

推荐阅读&#xff1a; JeeSite Vue3&#xff1a;前端开发的未来之路(更新版) 随着技术的飞速发展&#xff0c;前端开发技术日新月异。在这个背景下&#xff0c;JeeSite Vue3 作为一个基于 Vue3、Vite、Ant-Design-Vue、TypeScript 和 Vue Vben Admin 的前端框架&#xff0c;引…...

微信小程序-禁止页面下拉回弹

微信小程序-禁止页面下拉回弹,主要是pages.json中的这3个配置: "enablePullDownRefresh": false, 这个配置项用于控制页面是否支持下拉刷新。当设置为false时&#xff0c;用户无法通过下拉页面来触发刷新操作。 "disableScroll": true, 这个配置项用于控…...

测试环境搭建整套大数据系统(十六:超级大文件处理遇到的问题)

一&#xff1a;yarn出现损坏的nodemanger 报错现象 日志&#xff1a;1/1 local-dirs usable space is below configured utilization percentage/no more usable space [ /opt/hadoop-3.2.4/data/nm-local-dir : used space above threshold of 90.0% ] ; 1/1 log-dirs usabl…...

C++ 并发编程指南(11)原子操作 | 11.6、计算机内存结构

文章目录 一、计算机内存结构1、内存的基本组成2、内存的类型3、内存的结构层次4、CPU架构5、局部性原理6、总结 前言 在探讨计算机的运行效率和数据处理能力时&#xff0c;内存结构无疑是一个至关重要的部分。内存&#xff0c;作为计算机系统中的关键组件&#xff0c;承担着存…...

正则表达式教程

正则表达式在线工具网站&#xff1a;https://regexr.com...

SEO之为什么研究关键词(二)

初创企业需要建站的朋友看这篇文章&#xff0c;谢谢支持&#xff1a; 我给不会敲代码又想搭建网站的人建议 新手上云 &#xff08;续上一篇。。。。。&#xff09; 3、寻找有效流量 排名和流量都不是目的&#xff0c;有效流量带来的转化才是目的。就算公司有足够的实力将一些…...

Mysql 创建索引

1. 在创建表时添加索引 在使用CREATE TABLE语句创建表的同时&#xff0c;可以直接定义索引。例如&#xff0c;创建一个包含索引的表&#xff1a; CREATE TABLE clothes (id INT PRIMARY KEY,c_brand VARCHAR(100),c_type VARCHAR(50),c_size VARCHAR(10),price DECIMAL(10, 2…...

vaspkit 画 Charge-Density Difference

(echo 314;echo $(cat 1))|vaspkit 文件1提前写好使用的CHGCAR路径 SPIN_DW.vasp ../ML2scf/SPIN_DW.vasp ../ML1scf/SPIN_DW.vasp POSite and negative 默认为blue,and 青色 (RGB 30 245 245) 正值&#xff1a;blue 。负值&#xff1a;青色 RGB 30 245 245。 提示&…...

FreeRTOS缩小bss段的处理

bss太大了&#xff0c;有60多M&#xff0c;客户要求处理一下 readelf -s app.elf | grep "OBJECT" 发现有一条 592: 8800dd78 0x4000000 OBJECT LOCAL DEFAULT 15 ucHeap 长度64M&#xff0c;地址8800dd78刚好在bss段里&#xff0c;bss段地址如下&#xff…...

STM32数字示波器+详细注释+上位机程序+硬件

目录 1、设计指标&#xff1a; 2、功能&#xff1a; 3、上位机的程序 ​4、测试的照片 5、PCB 6、模拟电路板 7、程序 资料下载地址&#xff1a;STM32数字示波器详细注释上位机程序硬件 1、设计指标&#xff1a; 主控: STM32…...

【平衡二叉树】AVL树(双旋)

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; C进阶 &#x1f389;其它专栏&#xff1a; C初阶 | Linux | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解AVL树的左双选和右双旋的相关内容。 如果看到最后您觉得这篇文章写…...

【保姆级介绍自动化的讲解】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…...

【大数据面试题】27 讲下Doris的物化视图

一步一个脚印&#xff0c;一天一道面试题。 物化视图概念 物化视图&#xff0c;顾名思义&#xff0c;是将一个查询的结果预先计算并存储为物理表的形式。这意味着&#xff0c;原本需要在运行时动态执行的复杂查询&#xff0c;现在变成了直接从已经计算好的结果表中读取数据&a…...

kylin 使用心得

Kylin操作系统是一种基于Linux的操作系统&#xff0c;主要在中国使用&#xff0c;由中国国内的开发团队维护。它的目标是为了提供一个稳定、安全、易于使用的操作环境。以下是一些用户可能基于Kylin操作系统的使用心得&#xff1a; 1. **界面友好**&#xff1a;Kylin操作系统通…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...