C语言设计并实现四种求解斐波那契数列的算法,并用计时法测量算法的运行时间
时间: 2024-09-23 22:01:30 浏览: 38
利用函数求解斐波那契数列的主流三种算法介绍与代码实现.md
斐波那契数列是一个经典的递归序列,前两个数通常为0和1,后面的每个数字都是前两个数字之和。在C语言中,可以设计多种求解斐波那契数列的算法,包括递归、动态规划、矩阵快速幂以及迭代等。
以下是四种常见的算法示例:
1. **递归法**(效率较低)
```c
#include <stdio.h>
long long fib(int n) {
if (n <= 1)
return n;
else
return fib(n - 1) + fib(n - 2);
}
```
2. **动态规划**(效率较高)
```c
#include <stdio.h>
long long fib(int n) {
int dp[n+1];
dp[0] = 0;
dp[1] = 1;
for (int i=2; i<=n; i++) {
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
```
3. **矩阵快速幂**(效率最高)
```c
#include <stdio.h>
void multiply(long long F[2][2], long long M[2][2]) {
long long x = F[0][0]*M[0][0] + F[0][1]*M[1][0];
long long y = F[0][0]*M[0][1] + F[0][1]*M[1][1];
long long z = F[1][0]*M[0][0] + F[1][1]*M[1][0];
long long w = F[1][0]*M[0][1] + F[1][1]*M[1][1];
F[0][0] = x;
F[0][1] = y;
F[1][0] = z;
F[1][1] = w;
}
void power(long long F[2][2], int n) {
if (n == 1)
return;
long long M[2][2] = {{1, 1}, {1, 0}};
power(F, n/2);
multiply(F, F);
if (n % 2 != 0)
multiply(F, M);
}
long long fib(int n) {
if (n <= 1)
return n;
long long F[2][2] = {{1, 1}, {1, 0}};
power(F, n - 1);
return F[0][0];
}
```
4. **迭代法**
```c
#include <stdio.h>
long long fib(int n) {
long long a = 0, b = 1, c = 0;
if (n == 0)
return a;
for (int i = 2; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}
```
为了测量算法的运行时间,你可以使用`<time.h>`库中的`clock()`函数或者更准确的`chrono`模块,在每次计算完一个斐波那契数后记录当前时间,然后减去开始的时间,得到耗时。
阅读全文