递归加法序列C++
Recursive addition sequence C++
基本上,我需要在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 << " ";
}
}
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- 使用递归时获取变量的奇怪值
- 如何在C++中递归地按相反顺序打印集合
- 到连接组件算法的问题(递归)
- 如何使用递归打印修改后的星号三角形图案
- 使用递归模板动态分配的多维数组
- 递归函数有效,但无法记忆
- 包含模板文件的递归会导致编译失败