【问题标题】:Recursive Function With Increasing Values具有递增值的递归函数
【发布时间】:2018-10-11 07:38:23
【问题描述】:

我正在尝试编写一个递归函数来评估 n

3(2+1)+4(3+2+1)+...+(n+1)(n+...+2+1)

我知道,通常我们需要将其写成归纳,假设 n=1 的基本情况的结果,然后调用 n-1 的函数,这将在基本情况下结束。

但是在下面的函数中元素增加了,我应该如何处理这个

【问题讨论】:

  • 这简化为 4 次多项式,因此不需要递归。来自 wolfram alpha:sum_(i=2)^n (i + 1) sum_(j=1)^i j = 1/24 (3 n^4 + 14 n^3 + 21 n^2 + 10 n - 48)
  • @PaulHankin 请您分享简化过程(也许在答案中)?我无法得到它(或者似乎在 wolfram 上产生了步骤 :)
  • j+...+3+2+1j(j+1)/2 然后乘以j+1 得到一个三阶多边形。然后,您只需应用 sum(j)sum(j^2)sum(j^3) 的公式(也许减去 j=1 的一项,这在整体结果中是缺失的。
  • @PaulHankin 谢谢!

标签: algorithm recursion iteration corecursion


【解决方案1】:

这也和你提到的一般方式相同。就这样看吧:

(n+1)(n + (n-1) + (n-2) + ... + 1) + (n)((n-1) + (n-2) + ... + 1) + (n-1)((n-2) + (n-3) + ... + 1)

所以假设你有一个名为 SumTo(n) 的函数,它返回从 1 到 n 的所有数字的总和,这是递归函数:

int Calc(n)
{
   if (n == 3)
     return n(sumTo(2));

   else return n(sumTo(n-1)) * Calc(n-1);
}

【讨论】:

    【解决方案2】:

    你只需要维护你的循环变量和一个计数器,在每次迭代中增加计数器,直到它等于 n,从 n = 0 开始(或 1,等等)。

    然后当count == n 得到答案时,就结束循环。

    向上而不是向下计数是 corecursion 的特征,前提是每个迭代步骤是有限(这里肯定是)。

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      相关资源
      最近更新 更多