c ++递归加法,4 * x

时间:2017-11-05 20:44:03

标签: c++ recursion

我一直试图理解如何处理一个返回这样的数字之和的函数: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)),但显然我并没有正确地考虑这一点。我想建议至少要理解它背后的数学以及如何将它与代码相关联

1 个答案:

答案 0 :(得分:1)

非递归解决方案

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

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