Fibonacci数列的各种解法

本文介绍了Fibonacci数列的多种求解算法,包括递归法、表驱动的递归法、迭代法、迁移矩阵法、通项公式法、模板元编程法和函数对象法。详细讨论了每种方法的时间复杂度和适用场景,帮助读者理解并选择合适的算法实现。
摘要由CSDN通过智能技术生成

Fibonacci数列:

 

  描写了动物滋生数量、植物花序改变等大措施则。作为一个经典的数学识题,Fibonacci数列常作为例子展目前途序设计、数据构造与算法等多个相干学科中。

  下面容易地分析一下常见的Fibonacci数列求解算法。

  1、递归法。大多数教材在解说递归算法时总迷恋以Fibonacci数列为例,这是因为我们能够直观地从定义公式的第三行看出Fibonacci数列的递归性。其C++告终如下:

unsigned long Fib(int n)

{

    if (n <= 1) {

        return n;

    } else {

        return Fib(n - 1) + Fib(n - 2);

    }

}

  递归算法与定义公式极其合乎,草带会意,但计算过程存在许多重复的计算,工夫混杂度到达了O(2^n),利用的内存空间也随着函数调用栈的增长而增长。这显明难受于实用的过程。

  2、表驱动的递归法。这里不提单纯的表驱动法,因为对于项数未知的Fibonacci数列开启***的空间来换取工夫未免不划算且不负责。我们只是为了肃清递归法中许多重复的计算,能够将曾经计算过的其中值存入一个表,已备后续利用:

#define MAX_LOG 20

static unsigned long Logs[MAX_LOG] = {0};

unsigned long Fib(int n)

{

    if (n <= 1) {

        return n;

    } else if (n < MAX_LOG && Logs[n] != 0) {

        return Logs[n];

    } else {

        Logs[n] 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值