如何在C语言中优化递归求解斐波那契数列?
时间: 2024-09-27 14:12:41 浏览: 41
C语言中递归函数的设计完整版资料.ppt
在C语言中,递归求解斐波那契数列可能会导致效率低下,因为每次递归都会重复计算许多已经知道的结果。为了优化,可以采用一种叫做"记忆化"的技术,即动态规划。我们可以创建一个数组存储中间结果,避免重复计算。
下面是优化后的C语言代码示例[^2]:
```c
#include <stdio.h>
#define MAXN 100 // 设置一个合理的最大值
int fib_table[MAXN]; // 创建一个数组存储斐波那契数
int fibonacci(int n) {
if (n <= 1) {
return n;
}
// 如果数组已填充到n,从表中查找
if (fib_table[n] != 0) {
return fib_table[n];
}
// 计算并存储结果
fib_table[n] = fibonacci(n - 1) + fibonacci(n - 2);
return fib_table[n];
}
int main() {
int n, i;
printf("请输入要计算的斐波那契数列的长度:");
scanf("%d", &n);
if (n > MAXN) {
printf("斐波那契数列超出最大值范围\n");
return 1;
}
printf("斐波那契数列的前%d个数字为:\n", n);
for (i = 1; i <= n; i++) {
printf("%d ", fibonacci(i));
}
return 0;
}
```
通过这个优化,我们只计算每个数一次,显著提高了求解斐波那契数列的速度[^1]。
阅读全文