【问题标题】:Converting recursive formulate into pseudocode using memoization使用记忆化将递归公式转换为伪代码
【发布时间】: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] &lt;= 0 then -- 这不应该是&gt; 0,因为所有返回值都必须是正数吗?
  • 是的,应该是 >=,我拼写错误
  • 也许是return 0 而不是q = 0,假设缩进是正确的。
  • 虽然这也是正确的,但现在我只知道最后一个 else 语句中的递归有问题,但我不确定是什么
  • 如何那你知道错了吗?此外,您应该将r 传递给第一个递归调用。

标签: recursion dynamic-programming memoization recurrence


【解决方案1】:

从 cmets 开始:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 2015-01-05
    • 2020-07-07
    相关资源
    最近更新 更多