递归加法序列C++

Recursive addition sequence C++

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

基本上,我需要在C++中创建一个序列,如果给定(5,6)作为参数,输出将是:

5, 11, 18, 26, 35, 45

我不知道这叫什么,但它是这样工作的:

5 = 5
11 = 5 + (5 + 1)
18 = 11 + (5 + 2)
26 = 18 + (5 + 3)

等等。这样做的次数由第二个参数决定。

我试了三天想弄清楚,但没有成功。我通常会得到类似的东西

int recProb(int incrementBy, int counter){
    if (counter == 0){
        return incrementBy;
    }
    cout << incrementBy + recProb(incrementBy + 1, counter - 1) << ", ";
}

或者类似于fibonacci序列递归解决方案的东西。如果有人能给我指一个正确的方向,那就太棒了。谢谢

(很抱歉格式太糟糕了,我不知道该怎么做)。

据我所知,您的函数是

f(k, 1) = k
f(k, n) = f(k, n-1) + k + (n - 1)

所以

int f(int k, int n)
{
    if (n == 1)
    {
        cout << k;
        return k;
    }
    else
    {
       int val = f(k, n-1) + k + (n-1);
       cout << ", " << val;
       return val;
    }
}

可以做到。
(未经过严格测试-仅针对您的示例。)

如果您想:

a) 使用递归b) 仅使用2个参数(两个int)

我看不出你该怎么做。唯一的方法是在2个当前参数中隐藏额外的参数(比如num的原始值),然后使用逐位运算符提取它们。

    #include <iostream>
using namespace std;
void func(__int32 num, __int32 counter)
{
    if ( (num >> 16) == 0) num += (num << 16) + (1<<16);
    if (counter == 0) return;
    cout << (num & 0xFFFF) << ' ';
    func(num + (1<<16) + (num>>16) , --counter);
}
int main()
{
    func(5, 6);
    cin.get();
}

这里有一个只包含循环的解决方案-

int recProb(int incrementBy, int counter) {
  int i, sum = incrementBy;
  cout << sum << " ";
  for(i=1; i<counter; i++) {
     incrementBy += 1;
     sum += incrementBy;
     cout << sum << " ";
  }
}