【发布时间】:2018-06-02 17:04:41
【问题描述】:
我一直在尝试将下面的递归公式转换为使用记忆的伪代码,但是目前我所知道的是我的以下尝试不正确,有人能指出我正确的方向吗?
我的递归公式:
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
我目前的尝试:
MEM-N(C, i, r)
if r[i] >= 0 then
return r[i]
if i = 0 and r[i] >= 0 or C < 0 and r[i] >= 0 then
return 0
else if C = 0 and r[i] >= 0 then
return 1
else
q = -$\infty$
q = MEM-N(C - $p_i$, i-1) + MEM-N(C,i - x, r)
r[i] = q
return q
【问题讨论】:
-
if r[i] <= 0 then-- 这不应该是> 0,因为所有返回值都必须是正数吗? -
是的,应该是 >=,我拼写错误
-
也许是
return 0而不是q = 0,假设缩进是正确的。 -
虽然这也是正确的,但现在我只知道最后一个 else 语句中的递归有问题,但我不确定是什么
-
如何那你知道错了吗?此外,您应该将
r传递给第一个递归调用。
标签: recursion dynamic-programming memoization recurrence