如何使用递归函数计算和打印以下序列的前 N 个元素的总和
Posted
技术标签:
【中文标题】如何使用递归函数计算和打印以下序列的前 N 个元素的总和【英文标题】:How can i calculate and print the sum of first N elements of below sequence using recursive function 【发布时间】:2022-01-15 16:35:18 【问题描述】:示例: 样本输入 N:4
样本输出:7 + 12 + 17 + 22 = 58
我做了部分代码,但它给出了错误的结果,我不知道我在哪里犯了错误。这就是我需要帮助的原因!
def recur_sum(n):
if n <= 1:
return n
else:
for i in range(7,n+1):
return i + recur_sum(i-1)
num = int(input("Enter a number: "))
if num < 0:
print("Enter a positive number")
else:
print("The sum is",recur_sum(num))
【问题讨论】:
这4个数字怎么选?什么是“低于序列”? 范围从7到5没有值,所以直接结束 当您提出问题时,您需要在接下来的 10-15 分钟内停留,否则问题将被关闭/没有人会来看它,因为每分钟都有新问题,你的人会消失在海里;) @BehdadAbdollahiMoghadam 请不要试图知道 OP 到底想要什么,他的帖子不清楚,缺少信息。你可以回答,但试着说服别人这是这样的;) 【参考方案1】:据我了解您的问题,您想要一个序列的总和,该序列的每个元素都增加了step
(例如5
),并且它有一个initial value
(例如@987654324 @),并且您想要此序列的第一个 N
(如 4
)元素的总和。
在每个递归级别,我们将 current value
添加到 step
,但是当 n == 1
我们只返回 current value
(这是序列的第 N
项)。
这样做:
def recur_sum(cur_val, step, n):
if n == 1:
return cur_val
return cur_val + recur_sum(cur_val+step,step,n-1)
num = int(input("Enter a number: "))
init_val = 7
step = 5
if num < 0:
print("Enter a positive number")
else:
print("The sum is",recur_sum(init_val, step, num))
输出:
The sum is 58
【讨论】:
我不相信这是一个好的答案,但至少:一个好的答案应该解释问题是什么,解决方案是什么,而不是只写代码跨度> 感谢您的评论@azro 我添加了一些解释。【参考方案2】:这将返回一个从 7 开始的所有连续数字的列表,每个增量为 5。对返回数组求和....更改 5 和 2 以更改所需跳转/步骤的增量,并更改初始返回值..
def recur_sum(n):
if n == 1:
return [7]
else:
return [5*n+2] + recur_sum(n-1)
num = int(input("Enter a number: "))
res = recur_sum(num)
print(sum(res))
【讨论】:
【参考方案3】:上面已经提出了一个递归函数,它返回直到n
(其中n
是你的函数的输入)的所有元素。
在我的理解中,您需要一个具有一些递归逻辑的函数,该函数返回所有元素的 sum 直到第 n 个。
您的序列是 7、12、17、22、27 等等。如果我们剖析它:
it element sum sum is element is
1 7 7 1 * 7 + 0 * 5 1 * 7 + 0 * 5
2 12 19 2 * 7 + 1 * 5 1 * 7 + 1 * 5
3 17 36 3 * 7 + 3 * 5 1 * 7 + 2 * 5
4 22 58 4 * 7 + 6 * 5 1 * 7 + 3 * 5
5 27 85 5 * 7 + 10 * 5 1 * 7 + 4 * 5
如果您想不惜一切代价实施递归解决方案,如果很明显,您需要在每一步将滚动总和增加it * 7 + (it - 1) * 5
(其中 7 是您的 start
点,而 5 是您的 step
)。
您可以按如下方式实现递归解决方案:
def recursive(n, step = 5, start = 7, counter = 1):
if n > 0:
this_element = start + (counter - 1) * step
if counter == n:
return this_element
else:
return this_element + recursive(n, step = step, start = start, counter = counter + 1)
else:
return 0
for i in range(1, 10):
print(recursive(i))
输出
7
19
36
58
85
117
154
196
243
从上表中您可以看到,考虑到 直到第 n 步的元素总和 有解决方案,这里递归解决方案可能有点过头了:
def my_sum(n, step = 5, start = 7):
return n * start + int(step * (n - 1) * n / 2)
for i in range(1, 10):
print(my_sum(i))
输出
7
19
36
58
85
117
154
196
243
【讨论】:
以上是关于如何使用递归函数计算和打印以下序列的前 N 个元素的总和的主要内容,如果未能解决你的问题,请参考以下文章
编写函数求出以下分数序列的前n项之和。和值作为函数值返回。 2/1,3/2,5/3,8/5,13/8,21/13,……
C语言:采用递归调用函数方法计算Fibonacci数列的前20项