gpt4 book ai didi

c++ 递归加法,4*x

转载 作者:行者123 更新时间:2023-11-28 04:55:58 25 4
gpt4 key购买 nike

我一直在尝试了解如何使用递归来处理返回数字总和的函数: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);
}
}

当然这是行不通的,我也试着认为,因为一切都是一样的,但因数是 4,因此 MyFunction(4(x-1)) 但显然我没有正确考虑这一点。我想要至少了解其背后的数学原理以及如何将其与代码联系起来的建议

最佳答案

非递归解决方案

有限等差级数的成员之和称为算术级数。例如,考虑总和:

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

关于c++ 递归加法,4*x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47126440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com