【问题标题】:Recursive function analysis递归函数分析
【发布时间】:2012-04-13 04:39:03
【问题描述】:

我正在尝试分析我编写的递归程序的性能。

基本代码是

Cost(x)
{
1 + MIN(Cost(x-1), Cost(x-2), Cost(x-3))
}

我想为调用 Cost() 的次数写一个递归关系。我该如何开始呢?

类似于T(x) = T(x/2)。但是我觉得不对

编辑:对于 Cost() 的 3 次递归调用,我可以将其表示为分支因子为 3 的树。那么T(x) = T(x/3) 会更准确吗?

【问题讨论】:

    标签: recursion recurrence


    【解决方案1】:

    对 Cost() 的调用次数为:

    C(x) = 1 + C(x-1) + C(x-2) + C(x-3)
    

    因此,对于输入 x,Cost() 被调用一次,加上对 x-1x-2x-3 的调用次数。这是假设您的解决方案不使用记忆。递归关系不太好:http://www.wolframalpha.com/input/?i=T(x)+%3D+1+%2B+T(x-1)+%2B+T(x-2)+%2B+T(x-3)

    但是,使用 memoization,您的“调用次数”变为 C(x) = x,因为您只需在 0x 之间为所有 i 评估一次 C(i)。 (可能是C(x) = x + 1,取决于您的初始条件)

    【讨论】:

      【解决方案2】:

      你真的写了一个递归解决方案吗?(我希望它是一个与线性迭代比较的赋值)

      我觉得

      T(X) = T(X-1)+T(X-2)+T(X-3)+C
      C is small constant
      

      【讨论】:

      • 你能解释一下这背后的直觉吗?
      猜你喜欢
      • 1970-01-01
      • 2012-08-29
      • 2015-03-04
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 2022-10-25
      相关资源
      最近更新 更多