我正在尝试为n
编写一个递归函数3(2+1)+4(3+2+1)+...+(n+1)(n+...+2+1)
我知道一般情况下我们需要把它写成归纳,基本情况的结果就是说n = 1,然后调用n-1的函数,它将以基本情况结束。
但是在以下函数中元素增加了,我应该如何处理这个
答案 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 (这里肯定是)。