代码之家  ›  专栏  ›  技术社区  ›  BillyDean

递归加法序列C++

  •  0
  • BillyDean  · 技术社区  · 9 年前

    基本上,我需要在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序列递归解的东西。如果有人能告诉我正确的方向,那就太棒了。谢谢

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

    3 回复  |  直到 9 年前
        1
  •  3
  •   molbdnilo    9 年前

    据我所知,你的职能是

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

    可以做到这一点。
    (未经过严格测试-仅以您的示例为例。)

        2
  •  1
  •   berbatov    9 年前

    如果您想:

    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();
    }
    
        3
  •  0
  •   sray    9 年前

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

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