C语言实例之9斐波那契数列实现

server/2024/11/27 16:27:08/

1. 斐波那契数列简介

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多・斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为 “兔子数列”。
它的特点是从第三项开始,每一项都等于前两项之和,数列的前两项通常定义为 0 和 1(也有从 1 和 1 开始的定义方式,这里以 0 和 1 为例),即:
在这里插入图片描述

该数列的前几项依次为:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144……
斐波那契数列在自然界、计算机科学、数学等诸多领域都有广泛的应用,比如某生长模式、某算法优化等。
以下是不同方式输出斐波那契数列前20项的值

2. 实例代码之递归实现

需要注意的是,递归实现方式在计算较大项数时效率会很低,因为存在大量重复计算。

#include <iostream>// 递归函数计算斐波那契数列
int fibonacciRecursive(int n) {if (n == 0) {return 0;} else if (n == 1) {return 1;} else {return fibonacciRecursive(n - 1) + fibonacciRecursive(n - 2);}
}int main() {std::cout << "斐波那契数列(递归实现)前20项的值为:" << std::endl;for (int i = 0; i < 20; ++i) {int result = fibonacciRecursive(i);std::cout << result << " ";}std::cout << std::endl;return 0;
}

3. 实例代码之for循环实现

该实现方式相对递归实现效率更高,尤其在计算较大项数时优势明显。

#include <iostream>// 迭代函数计算斐波那契数列
int fibonacciIterative(int n) {if (n == 0) {return 0;} else if (n == 1) {return 1;}int a = 0, b = 1, c;for (int i = 2; i <= n; ++i) {c = a + b;a = b;b = c;}return b;
}int main() {std::cout << "斐波那契数列(迭代实现)前20项的值为:" << std::endl;for (int i = 0; i < 20; ++i) {int result = fibonacciIterative(i);std::cout << result << " ";}std::cout << std::endl;return 0;
}

4. 实例代码之数组实现

这种实现方式在需要多次访问数列不同项时可能会更方便,因为已经计算过的项都存储在数组中了。

#include <iostream>// 使用数组计算斐波那契数列
int fibonacciArray(int n) {if (n == 0) {return 0;} else if (n == 1) {return 1;}int fibArray[n + 1];fibArray[0] = 0;fibArray[1] = 1;for (int i = 2; i <= n; ++i) {fibArray[i] = fibArray[i - 1] + fibArray[i - 2];}return fibArray[n];
}int main() {std::cout << "斐波那契数列(数组存储实现)前20项的值为:" << std::endl;for (int i = 0; i < 20; ++i) {int result = fibonacciArray(i);std::cout << result << " ";}std::cout << std::endl;return 0;
}

5. 输出

在这里插入图片描述


http://www.ppmy.cn/server/145374.html

相关文章

【VRChat 改模】开发环境搭建:VCC、VRChat SDK、Unity 等环境配置

一、配置 Unity 相关 1.下载 UnityHub 下载地址&#xff1a;https://unity.com/download 安装打开后如图所示&#xff1a; 2.下载 VRChat 官方推荐版本的 Unity 跳转界面&#xff08;VRChat 官方推荐页面&#xff09;&#xff1a;https://creators.vrchat.com/sdk/upgrade/…

javaweb-day01-html和css初识

html:超文本标记语言 CSS&#xff1a;层叠样式表 1.html实现新浪新闻页面 1.1 标题排版 效果图&#xff1a; 1.2 标题颜色样式 1.3 标签内颜色样式 1.4设置超链接 1.5 正文排版 1.6 页面布局–盒子 &#xff08;1&#xff09;盒子模型 &#xff08;2&#xff09;页面布局…

小程序-基于java+SpringBoot+Vue的农场管理系统设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

2024.11.26总结

今晚考了个科目四&#xff0c;只准备了半天&#xff0c;考试的时候几乎都是乱选的&#xff0c;选完后就走人了&#xff0c;相当于白白浪费了一次机会。有时候感觉上班太累了&#xff0c;不知道是心累&#xff0c;还是其他方面。 思来想去&#xff0c;还是决定继续在CSDN上输出…

哈希表—acwing

一、题目&#xff1a;模拟散列表 840. 模拟散列表 - AcWing题库 分析 代码&#xff08;哈希表的拉链存储结构&#xff09; // 哈希表拉链法存储结构 #include<bits/stdc.h> using namespace std;const int N 1e53; // 拉链结构 int h[N], e[N], ne[N], idx;void inse…

占用磁盘100%?Apache DolphinScheduler 日志如何定时清理!

当 Apache DolphinScheduler 运行几个月后&#xff0c;大部分朋友会发现 Logs 下的运行日志越来越多&#xff0c;这时可以考虑清理下 Logs/ 目录下的日志文件&#xff0c;比如设置只保留最近 3 天的日志&#xff0c;怎么操作呢&#xff1f; 可以通过执行以下三个命令来实现&…

获取字 short WORD 上指定的位是否有效

/// <summary> /// 获取字 short WORD 上指定的位是否有效 /// </summary> /// <param name"val"></param> /// <param name"bit"></param> /// <returns></returns> public boo…

使用Java代码操作Kafka(五):Kafka消费 offset API,包含指定 Offset 消费以及指定时间消费

文章目录 1、指定 Offset 消费2、指定时间消费 1、指定 Offset 消费 auto.offset.reset earliest | latest | none 默认是 latest &#xff08;1&#xff09;earliest&#xff1a;自动将偏移量重置为最早的偏移量&#xff0c;–from-beginning &#xff08;2&#xff09;lates…