C语言实现数组存储的递归记忆型斐波那契数列
当然可以,以下是一种可能的实现:
#include <stdio.h>
#define MAX_N 100000
int fib[MAX_N + 1]; // 存储斐波那契数列
// 初始化斐波那契数列的前两项
void init_fib() {
fib[0] = 0;
fib[1] = 1;
}
// 计算第n项斐波那契数列的值
int calc_fib(int n) {
if (n == 0 || n == 1) {
return fib[n];
}
if (fib[n] != -1) { // 如果已经计算过第n项,则直接返回
return fib[n];
}
fib[n] = calc_fib(n - 1) + calc_fib(n - 2); // 递推计算第n项
return fib[n];
}
int main() {
int n;
init_fib();
for (int i = 2; i <= MAX_N; i++) {
fib[i] = -1; // 初始化为-1,表示还未计算过
}
printf("请输入要计算的斐波那契数列项数n:");
scanf("%d", &n);
if (n < 0 || n > MAX_N) {
printf("输入的n超出范围\n");
return 1;
}
printf("第%d项斐波那契数列的值为:%d\n", n, calc_fib(n));
return 0;
}
这个实现使用了一个数组 fib 来存储斐波那契数列,其中 fib[i] 表示第i项斐波那契数列的值。在初始化时,我们将 fib[0] 和 fib[1] 分别设为0和1,表示数列的前两项。对于其他项,我们将它们初始化为-1,表示还未计算过。在递归计算第n项斐波那契数列的值时,如果 fib[n] 已经被计算过,则直接返回它的值;否则,我们使用递推式 fib[n] = fib[n-1] + fib[n-2] 来计算。这样,我们就实现了一个具有记忆性的斐波那契数列。
原文地址: https://www.cveoy.top/t/topic/loCZ 著作权归作者所有。请勿转载和采集!