增值的递归函数

时间:2018-05-01 08:38:57

标签: algorithm recursion iteration corecursion

我正在尝试为n

编写一个递归函数
3(2+1)+4(3+2+1)+...+(n+1)(n+...+2+1)

我知道一般情况下我们需要把它写成归纳,基本情况的结果就是说n = 1,然后调用n-1的函数,它将以基本情况结束。

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

2 个答案:

答案 0 :(得分:5)

这也与您提到的一般方式相同。只是这样看:

(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);
}

答案 1 :(得分:2)

您只需要维护循环变量和计数器,在每次迭代时增加计数器,直到它等于n,从n = 0情况开始(或1,无论如何)。

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

计算而不是向下是 corecursion 的特征,前提是每个迭代步骤都是 finite (这里肯定是)。