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]