c++ 递归添加,4*x

c++ Recursion addition, 4*x

本文关键字:递归 添加 c++      更新时间:2023-10-16

我一直在尝试了解如何使用返回如下数字之和的函数:1+2+3+4...4n 通过使用递归

尝试了不同的案例但没有成功,我想知道是否有任何数学方法来解决它并将其转换为代码。我知道如果我是这个函数:

int MyFunction(int x) 
{
  if (x==0)
   return 0;
  else{
    return x+MyFunction(x-1);
  }
}

我使用 x=3,它将返回等于 1+2+3 等于 6,但就我而言,我想做类似的事情,但最多是数字的 4 倍。例如,如果 x=1,它将返回 1+2+3+4,因为 4(1)=4。那么返回的是那些等于 10 的数字的加法

我试着考虑简单地将x转换为4 * x

int MyFunction(int x) 
{
  if (x==0)
   return 0;
  else{
    return 4*x+MyFunction(x-1);
  }
}

当然这不起作用,我也试着认为,因为一切都是一样的,但 MyFunction(4(x-1))的系数为 4,但显然我没有正确考虑这一点。我想要至少要了解其背后的数学以及如何将其与代码联系起来的建议

非递归解决方案

有限算术级数

的成员之和称为算术级数。例如,考虑总和:

1 + 2 + 3 + ... 4n-1 + 4n

这个总和可以通过取相加的项数(这里为 4n),乘以级数中第一个和最后一个数字的总和(这里 1 + 4n = 4n+1),然后除以 2 来快速找到。

您正在寻找的公式是:

sum = 2n(4n+1)

可能的实现可以是:

int MyFunction(int n) 
{
    assert(n>0);
    return 2*n*(4*n+1);
}

注意:我们不检查可能的溢出


递归解决方案

int recursive_sum(int k)
{
  return (k>0) ? k+recursive_sum(k-1) : 0;
}
int recursive_MyFunction(int n)
{
  assert(n>0);
  return recursive_sum(4*n);
}

检查两种方法是否给出相同的结果

#include <cassert>
int MyFunction(int n) { ... as before ...} 
int recursive_MyFunction(int n) { ... as before ...} 
int main()
{
  int n = 10; // whatever you want
  assert(recursive_MyFunction(n)==MyFunction(n));
}