【问题标题】:Why my memoization code written in c not working?为什么我用 c 编写的记忆代码不起作用?
【发布时间】:2020-08-22 13:45:00
【问题描述】:
#include <stdio.h>
#include<stdlib.h>

int memo[100];

下面是使用memoization的函数。

我正在尝试将冗余递归调用的返回值存储在第 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(零)。 我无法找出这段代码有什么问题。请帮忙!

【问题讨论】:

    标签: c recursion memoization


    【解决方案1】:

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

    不,你没有。循环for(int i=0;i&lt;n;i++) 没有初始化memo[n]

    【讨论】:

    • 是的,你是对的。现在解决了。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 2013-08-06
    • 1970-01-01
    • 2016-01-23
    • 2011-05-31
    相关资源
    最近更新 更多