用c语言设计四种求斐波那契数列的算法并测量运算时间
时间: 2024-09-14 22:12:15 浏览: 51
在C语言中,我们可以设计多种求解斐波那契数列的算法,这里我会介绍四种常见的方法:
1. **递归**:
```c
#include <stdio.h>
#include <time.h>
// 递归函数
long long fibonacci_recursive(int n) {
if (n <= 1)
return n;
else
return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2);
}
int main() {
clock_t start, end;
int n = 40; // 测试数位防止无限递归
start = clock();
printf("%lld\n", fibonacci_recursive(n));
end = clock();
double time_spent = ((double)(end - start)) / CLOCKS_PER_SEC;
printf("Time taken for recursive method: %.6f seconds\n", time_spent);
return 0;
}
```
注意递归效率较低,因为它会重复计算很多已知的值。
2. **动态规划**:
```c
#include <stdio.h>
#include <time.h>
// 动态规划版本
long long fibonacci_dp(int n) {
long long 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() {
//...
double time_spent;
//...
}
```
这种方法存储了之前的结果,避免了重复计算。
3. **迭代**:
```c
#include <stdio.h>
#include <time.h>
// 迭代法
long long fibonacci_iterative(int n) {
long long fib = 0, prev = 1, curr = 1;
if (n <= 1)
return n;
for (int i = 2; i <= n; i++) {
fib = prev + curr;
prev = curr;
curr = fib;
}
return fib;
}
int main() {
//...
double time_spent;
//...
}
```
迭代方式更高效,因为它只需要循环到所需位置。
4. **矩阵快速幂**:
这是一种利用矩阵乘法和指数运算提高速度的高级技巧,适合大数值场景,但对于小规模的斐波那契数,可能过于复杂。
阅读全文