基本上,我需要在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) << ", ";
}
或类似于斐波纳契序列递归解决方案的东西。如果有人能指出我正确的方向,那将是非常棒的。谢谢。
(抱歉这种残酷的格式化,我无法弄清楚如何正确地进行格式化)。
答案 0 :(得分:3)
据我所知,你的功能是
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;
}
}
可以做到。
(未经过严格测试 - 仅限于您的示例。)
答案 1 :(得分:1)
如果你想:
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();
}
答案 2 :(得分:0)
这是一个只有循环的解决方案 -
int recProb(int incrementBy, int counter) {
int i, sum = incrementBy;
cout << sum << " ";
for(i=1; i<counter; i++) {
incrementBy += 1;
sum += incrementBy;
cout << sum << " ";
}
}
答案 3 :(得分:-1)
不是很优雅,但它使用递归。
main
显示了如何调用它。
#include <iostream>
void f(int a, int b, int c, int l)
{
if (c < l)
{
a += b + c;
std::cout << a << " ";
f(a, b, c + 1, l);
}
else
std::cout << std::endl;
}
int main()
{
f(0, 5, 0, 6);
return 0;
}