当然可以,以下是一种可能的实现:

#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] 来计算。这样,我们就实现了一个具有记忆性的斐波那契数列。

C语言实现数组存储的递归记忆型斐波那契数列

原文地址: https://www.cveoy.top/t/topic/loCZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录