【问题标题】:Recurrence relation for basic operation基本操作的递归关系
【发布时间】:2015-09-30 00:53:38
【问题描述】:

我需要一些帮助来为以下递归算法的基本操作创建递归关系:

int D(int n) {
  if (n==0) {
    return 0;
  }
  return D(n - 1) + D(n - 1);
}

我认为这个的基本操作是加法,但我在设置递归关系时遇到了麻烦

【问题讨论】:

  • 我认为您可能错误地指定了这一点。如给定的那样,对于任何积极的论点n,将值 0 交给您可能是一种非常昂贵的方式 (O(2**n))。
  • @pjs 是的,我知道这可能是一种昂贵的方式,但我想知道这个算法基本操作的递归关系是什么,我认为这个算法的计算值的递归关系是 2 * D( n-1)
  • T(n) = 2 * T(n-1) + c

标签: math recursion recurrence


【解决方案1】:

您确定这是正确的代码吗?递归关系为

D(n) = 2 * D(n-1)
base case D(n) = 0

你知道这是如何工作的吗?该函数的递归步骤向您显示递归步骤;函数的终止子句显示基本情况。

我很担心,因为在封闭的形式中,这是

D(n) = 0 for all n

【讨论】:

  • 是的,这是正确的代码,我知道它是 2 * D(n-1) 但这是用于基本操作还是用于算法的计算值?
  • 两者,我相信。我不确定“基本操作”在您的范例中可能意味着什么。
  • 基本运算被定义为算法计算时间最长的运算,在这种情况下我假设它是加法。例如,如果您要对阶乘使用递归算法:if n = 0 return 1 else return F(n − 1) ∗ n 计算值的递归关系是 F(n) = F(n − 1)*n,对于 n > 0,但是基本的递归关系运算(即乘法)是 M(n) =M(n − 1) + 1 --> M(n-1) 计算 F(n-1) 和 +1 以将 F(n-1) 与 n 相乘
  • 是的,加法是基本操作。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 2019-10-18
  • 2020-11-09
  • 2013-11-01
  • 2020-11-03
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多