为什么我用c编写的记忆代码无法正常工作?

问题描述

#include <stdio.h>
#include<stdlib.h>

int memo[100];

下面是使用记事的功能

我正在尝试将冗余递归调用的返回值存储在第n个位置的memo [n]数组中。

int rec(int n){
    if(n<=2)
        return 0;
    
    if(memo[n]!= -1)
        return memo[n];
    
    memo[n]= rec(n-2)+(n/2)-1;
    printf("%d",memo[n]);
    return memo[n];
}

下面是main()函数。 我已将memo []数组的所有值初始化为-1。

void main(){
 
    int n,t;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);

        if(n%2!=0)
            n=n-1;

        for(int i=0;i<n;i++){
            memo[i]= -1;
        }
        printf("\n%d",rec(n));
    }

}

输出为0(零)。 我无法找出这段代码出了什么问题。请帮忙!

解决方法

我已将memo []数组的所有值初始化为-1。

不,您没有。循环for(int i=0;i<n;i++)不会初始化memo[n]