用c语言 2.分别编写两个函数实现两种算法 3.编写main函数,在main函数里调用你写的两个函数,计算Fibonacci数列的第 20,30,40,50项,使用clock()函数计算运行时间 4.对比分析两个算法在时间上的差别。
时间: 2024-09-29 22:14:57 浏览: 46
在 C 语言中,我们可以使用递归或循环来计算 Fibonacci 数列,这是两个常见的算法。下面我会分别演示如何用这两种方法实现,并在 `main` 函数中调用它们。
首先,让我们定义一个递归版本的 Fibonacci 函数:
```c
#include <stdio.h>
#include <time.h>
// 递归 Fibonacci 函数
long long fib_recursive(int n) {
if (n <= 1)
return n;
else
return fib_recursive(n - 1) + fib_recursive(n - 2);
}
void print_fibonacci(int n, const char* algorithm_name) {
clock_t start = clock();
printf("Fibonacci number at position %d with %s algorithm: %lld\n", n, algorithm_name, fib_recursive(n));
clock_t end = clock();
double time_taken = ((double)(end - start)) / CLOCKS_PER_SEC;
printf("Time taken for calculation: %.6f seconds\n", time_taken);
}
```
接下来,我们使用循环实现非递归版本的 Fibonacci 函数:
```c
// 循环 Fibonacci 函数
long long fib_iterative(int n) {
long long t1 = 0, t2 = 1, nextTerm;
if (n == 0) return 0;
for (int i = 2; i <= n; i++) {
nextTerm = t1 + t2;
t1 = t2;
t2 = nextTerm;
}
return t2;
}
void iterative_fibonacci(int n, const char* algorithm_name) {
clock_t start = clock();
printf("Fibonacci number at position %d with %s algorithm: %lld\n", n, algorithm_name, fib_iterative(n));
clock_t end = clock();
double time_taken = ((double)(end - start)) / CLOCKS_PER_SEC;
printf("Time taken for calculation: %.6f seconds\n", time_taken);
}
```
现在,在 `main` 函数中调用这两个函数并计算指定位置的 Fibonacci 数:
```c
int main() {
int fibonacci_positions[] = {20, 30, 40, 50};
for (int i = 0; i < sizeof(fibonacci_positions) / sizeof(fibonacci_positions[0]); i++) {
print_fibonacci(fibonacci_positions[i], "Recursive");
iterative_fibonacci(fibonacci_positions[i], "Iterative");
}
return 0;
}
```
当你运行这个程序时,它会打印出每个位置的 Fibonacci 数及其对应的递归和迭代算法的时间消耗。通常来说,循环实现的非递归算法在处理大数时比递归更高效,因为递归会有大量的重复计算,而循环则避免了这种重复。
阅读全文