【问题标题】:Recursive addition sequence C++递归加法序列 C++
【发布时间】:2015-03-06 21:00:27
【问题描述】:

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

5, 11, 18, 26, 35, 45

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

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

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

我已经尝试了 3 天来解决这个问题,但没有运气。我通常会得到类似的东西

int recProb(int incrementBy, int counter){
    if (counter == 0){
        return incrementBy;
    }

    cout << incrementBy + recProb(incrementBy + 1, counter - 1) << ", ";
}

或类似于斐波那契序列递归解决方案的东西。如果有人能指出我正确的方向,那就太棒了。谢谢。

(对不起,格式很糟糕,我不知道如何正确地做到这一点)。

【问题讨论】:

  • 我假设这是一个家庭作业问题?

标签: c++ recursion add sequence addition


【解决方案1】:

据我所知,你的功能是

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

可以。
(未经严格测试 - 仅以您的示例为例。)

【讨论】:

  • 刚刚测试过,适用于一切。非常感谢。我可以看到我的答案还很遥远......
  • 我想这更像是一种风格选择,但由于你的 if 语句有返回,所以你不需要 else
【解决方案2】:

如果你想:

a) 使用递归 b) 仅使用 2 个参数(均为整数)

我看不出你是怎么做到的。唯一的方法是在当前的 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】:

    这是一个只有循环的解决方案 -

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

    【讨论】:

    • 我认为 OP 想要递归。看起来像家庭作业。
    猜你喜欢
    • 2013-03-23
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2021-11-27
    相关资源
    最近更新 更多