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

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

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.kler.cn/a/411139.html

相关文章:

  • 视频推拉流EasyDSS互联网直播点播平台技术特点及应用场景剖析
  • docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
  • Hyper-V配置-cnblog
  • 游戏引擎学习第23天
  • Java面试之多线程并发篇
  • TCL大数据面试题及参考答案
  • 图论入门编程
  • 安装 IntelliJ IDEA
  • 深度学习模型:循环神经网络(RNN)
  • 极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【五】
  • Error: Invalid version flag: if 问题排查
  • 【DFS】个人练习-Leetcode-646. Maximum Length of Pair Chain
  • jvm核心组件介绍
  • 手搓人工智能—聚类分析(下)谱系聚类与K-mean聚类
  • E2、UML类图顺序图状态图实训
  • 计算机网络的功能
  • 银行卡 OCR 识别 API 接口的发展前景
  • 解决 java -jar 报错:xxx.jar 中没有主清单属性
  • 物联网智能项目:智能家居系统的设计与实现
  • 旋转磁体产生的场 - 实验视频资源下载
  • 【Python 3.13】新特性解读,重大改进建议升级:JIT编译、免GIL,REPL、错误处理、类型系统等多个方面
  • Win7电脑IP地址查看与变换指南
  • shiny动态生成颜色选择器并将其用于绘图
  • JVM详解:垃圾回收机制
  • uniapp中使用uni-forms实现表单管理,验证表单
  • 机器学习-02HMM模型学习