如何使用递归函数计算和打印以下序列的前 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 ​​个元素的总和的主要内容,如果未能解决你的问题,请参考以下文章

递归c ++函数打印出斐波纳契树的元素

编写函数求出以下分数序列的前n项之和。和值作为函数值返回。 2/1,3/2,5/3,8/5,13/8,21/13,……

C语言:采用递归调用函数方法计算Fibonacci数列的前20项

python-027-递归-求序列最大值、计算第n个调和数、转换字符到整数

如何检测根递归调用?

C语言编程:用函数递归法求Fibonacci数列的前n项·