c++ 递归添加,4*x
c++ Recursion addition, 4*x
我一直在尝试了解如何使用返回如下数字之和的函数:1+2+3+4...4n 通过使用递归
我尝试了不同的案例但没有成功,我想知道是否有任何数学方法来解决它并将其转换为代码。我知道如果我是这个函数:
int MyFunction(int x)
{
if (x==0)
return 0;
else{
return x+MyFunction(x-1);
}
}
我使用 x=3,它将返回等于 1+2+3 等于 6,但就我而言,我想做类似的事情,但最多是数字的 4 倍。例如,如果 x=1,它将返回 1+2+3+4,因为 4(1)=4。那么返回的是那些等于 10 的数字的加法
我试着考虑简单地将x转换为4 * x
int MyFunction(int x)
{
if (x==0)
return 0;
else{
return 4*x+MyFunction(x-1);
}
}
当然这不起作用,我也试着认为,因为一切都是一样的,但 MyFunction(4(x-1))的系数为 4,但显然我没有正确考虑这一点。我想要至少要了解其背后的数学以及如何将其与代码联系起来的建议
非递归解决方案
有限算术级数的成员之和称为算术级数。例如,考虑总和:
1 + 2 + 3 + ... 4n-1 + 4n
这个总和可以通过取相加的项数(这里为 4n),乘以级数中第一个和最后一个数字的总和(这里 1 + 4n = 4n+1),然后除以 2 来快速找到。
您正在寻找的公式是:
sum = 2n(4n+1)
可能的实现可以是:
int MyFunction(int n)
{
assert(n>0);
return 2*n*(4*n+1);
}
注意:我们不检查可能的溢出
递归解决方案
int recursive_sum(int k)
{
return (k>0) ? k+recursive_sum(k-1) : 0;
}
int recursive_MyFunction(int n)
{
assert(n>0);
return recursive_sum(4*n);
}
检查两种方法是否给出相同的结果
#include <cassert>
int MyFunction(int n) { ... as before ...}
int recursive_MyFunction(int n) { ... as before ...}
int main()
{
int n = 10; // whatever you want
assert(recursive_MyFunction(n)==MyFunction(n));
}
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 递归添加子树以提升属性树
- 编写递归算法以从链表中删除元素.编写递归算法以将元素添加到链表中
- 如何在Qt中递归添加源文件
- 递归地将 1 添加到 BST 中的所有节点,但具有最小数据的节点除外
- 简单的二进制搜索树非递归添加功能
- c++ 递归添加,4*x
- 如何使用递归向字符串添加逗号
- 递归函数,添加传递给它的两个变量
- 将目录添加到Xcode自定义项目模板会产生奇怪的递归
- 使用递归将元素添加到向量中
- 递归添加到带有点 c++ 的向量
- 用内部类函数递归地添加数组数
- 递归-按顺序向列表中添加树数据
- 将基数10转换为12,在递归地添加字母字符时遇到麻烦
- 递归函数扫描字符串以添加ASCII
- 以递归方式将项添加到矢量
- QTDom -递归地向特定元素添加子元素
- 为什么添加相同的东西会翻转递归