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

C语言实现斐波那契数列

斐波那契数列是一个经典的数列,其定义如下:

- F(0) = 0
- F(1) = 1
- F(n) = F(n-1) + F(n-2) (对于 n ≥ 2)

我们可以使用C语言来实现斐波那契数列的生成。以下是几种常见的实现方式:

1. 递归实现
递归实现是最直观的方式,但效率较低,因为存在大量的重复计算。

#include <stdio.h>

int fibonacci(int n) {
    if (n <= 1) {
        return n;
    }
    return fibonacci(n - 1) + fibonacci(n - 2);
}

int main() {
    int n = 10; // 计算第10个斐波那契数
    printf("Fibonacci(%d) = %d\n", n, fibonacci(n));
    return 0;
}

2. 迭代实现
迭代实现效率较高,避免了递归中的重复计算。```c

#include <stdio.h>

int fibonacci(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;
}

int main() {
    int n = 10; // 计算第10个斐波那契数
    printf("Fibonacci(%d) = %d\n", n, fibonacci(n));
    return 0;
}

3. 动态规划实现
动态规划实现通过存储中间结果来避免重复计算,效率与迭代实现相当。```c

#include <stdio.h>

int fibonacci(int n) {
    int fib[n + 1];
    fib[0] = 0;
    fib[1] = 1;
    for (int i = 2; i <= n; i++) {
        fib[i] = fib[i - 1] + fib[i - 2];
    }
    return fib[n];
}

int main() {
    int n = 10; // 计算第10个斐波那契数
    printf("Fibonacci(%d) = %d\n", n, fibonacci(n));
    return 0;
}

4. 优化空间复杂度的动态规划实现
通过只存储前两个斐波那契数,可以进一步优化空间复杂度。```c

#include <stdio.h>

int fibonacci(int n) {
    if (n <= 1) {
        return n;
    }
    int prev2 = 0, prev1 = 1, current;
    for (int i = 2; i <= n; i++) {
        current = prev1 + prev2;
        prev2 = prev1;
        prev1 = current;
    }
    return current;
}

int main() {
    int n = 10; // 计算第10个斐波那契数
    printf("Fibonacci(%d) = %d\n", n, fibonacci(n));
    return 0;
}

5. 使用矩阵快速幂的优化实现
对于非常大的 `n`,可以使用矩阵快速幂的方法来进一步优化时间复杂度。```c

总结
递归实现:简单直观,但效率低。
迭代实现:效率高,适合大多数情况。
动态规划实现:效率高,但空间复杂度较高。
优化空间复杂度的动态规划实现:效率高,空间复杂度低。
矩阵快速幂实现:适合非常大的 `n`,时间复杂度最优。

根据具体需求选择合适的实现方式。

相关文章:

  • 在知识的旅途中,奔赴导游职业资格考试的星辰大海
  • 嵌入式软件测试的东方智慧:WinAMS工具的技术哲学与实践启示——一名汽车电子工程师的七年工具演进观察
  • VSCode集成C语言开发环境
  • 力扣1251年
  • SAIL-RK3576核心板应用方案——无人机视觉定位与地面无人设备通信控制方案
  • 密闭空间可燃气体监测终端:守护城市命脉,智驭燃气安全!
  • Agisoft Metashape 创建分块建模
  • Servlet知识点之Parameter和Attribute
  • 设计模式-观察者模式、状态模式
  • qt5中使用中文报错error: C2001: 常量中有换行符
  • 股票-K线
  • 安装oVirt环境
  • 测试之 Bug 篇
  • 【net1】tcp,route,iptables,macvlan
  • C语言每日一练——day_5
  • Windows中的用户变量和系统变量
  • 【写作模板】JosieBook的写作模板
  • 浏览器控制台的特殊执行方式,暂存变量的作用域 和 同步/异步行为解释
  • 数据结构——单链表list
  • 运算符在C和C++中的用法和区别(简洁易懂版)
  • A股午后拉升,沪指收复3400点:大金融发力,两市成交超1.3万亿元
  • 第四届长三角国际应急博览会开幕,超3000件前沿装备技术亮相
  • 字母哥动了离开的心思,他和雄鹿队的缘分早就到了头
  • 吉林:消纳绿电,“氢”装上阵
  • 旭辉控股集团主席林中:债务重组是活下来的前提,自营开发业务收缩至少数核心城市
  • 中美发布日内瓦经贸会谈联合声明达成关税共识,外交部回应