Recursion 用记忆法将递归公式转换为伪代码

Recursion 用记忆法将递归公式转换为伪代码,recursion,dynamic-programming,memoization,recurrence,Recursion,Dynamic Programming,Memoization,Recurrence,我一直在尝试将下面的递归公式转换为使用记忆的伪代码,但目前我所知道的是我下面的尝试是错误的,有人能为我指出正确的方向吗 我的递推公式: N(C,i) = 1 if C = 0 0 if i=0 or C<0} N(C-p_i, i-1) + N(C, i-1) otherwise N(C,i)= 如果C=0,则为1 如果i=0或C=0,则为0 返回r[i] 如果i=0且r[i]>=0或C=0,则 返回0 否则,如果C=0且r[i]>=0,则 返回1 其他的 q=-$\infty$ q=M

我一直在尝试将下面的递归公式转换为使用记忆的伪代码,但目前我所知道的是我下面的尝试是错误的,有人能为我指出正确的方向吗

我的递推公式:

N(C,i) =
1 if C = 0
0 if i=0 or C<0}
N(C-p_i, i-1) + N(C, i-1) otherwise
N(C,i)=
如果C=0,则为1
如果i=0或C=0,则为0
返回r[i]
如果i=0且r[i]>=0或C<0且r[i]>=0,则
返回0
否则,如果C=0且r[i]>=0,则
返回1
其他的
q=-$\infty$
q=MEM-N(C-$p_i$,i-1)+MEM-N(C,i-x,r)
r[i]=q
返回q

以下是评论:

MEM-N(C, i, r)
    if C = 0 then
        return 1
    else if i = 0 or C < 0 then
        return 0
    else if r[i] >= 0 then
        return r[i]                                        # move here
    else
        q = MEM-N(C - p_i, i - 1, r) + MEM-N(C, i - 1, r)  # fix
        r[i] = q
        return q
MEM-N(C,i,r)
如果C=0,则
返回1
否则,如果i=0或C<0,则
返回0
否则,如果r[i]>=0,则
返回r[i]#移到这里
其他的
q=MEM-N(C-p_i,i-1,r)+MEM-N(C,i-1,r)#fix
r[i]=q
返回q

如果r[i]是的,它应该是>=,我犯了一个拼写错误,可能
返回0
,而不是
q=0
,假设缩进是正确的。虽然缩进也是正确的,但我现在只知道最后一个else语句中的递归有问题,但我不确定你知道它错了什么?您还应该将
r
传递给第一个递归调用。
MEM-N(C, i, r)
    if C = 0 then
        return 1
    else if i = 0 or C < 0 then
        return 0
    else if r[i] >= 0 then
        return r[i]                                        # move here
    else
        q = MEM-N(C - p_i, i - 1, r) + MEM-N(C, i - 1, r)  # fix
        r[i] = q
        return q