如何使用遞回函式計算和列印以下序列的前 N ??個元素的總和
示例: 樣本輸入 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))
uj5u.com熱心網友回復:
據我了解您的問題,您想要一個序列的總和,該序列的每個元素都增加了一個step(例如5),并且它有一個initial value(喜歡7),并且您想要第一個N(喜歡4)元素的總和這個順序。
在每個遞回級別,我們添加current valueto step,但是當n == 1我們只回傳 the current value(這是N序列的第 th 項)時。
做這個:
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
uj5u.com熱心網友回復:
這將回傳從 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))
uj5u.com熱心網友回復:
上面已經提出了一個遞回函式,它回傳所有元素n(其中n是函式的輸入)。根據我的理解,您需要一個具有遞回邏輯的函式,該函式回傳直到第 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/384995.html
