亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

返回錯誤結果的序列的遞歸求和

返回錯誤結果的序列的遞歸求和

HUWWW 2021-12-26 15:26:59
我試圖檢索一個等差數列的前 n 項a(n) = n(n-1) + 4 where n(1) = 5 的總和:因此,前 2 項 (5,9) 的總和將是 14。但是,我的代碼沒有返回這個。相反,我得到了 13。我錯過了什么?def main():    sequence(3,0)    print("in main")# 5,9,13,17,21,...# Sum of first 2 = 14# Sum of first 3 = 27def sequence(n, sum):    if (n == 1):        return 5    else:        a = sequence(n-1, sum) + 4        sum += a        print(sum)        return aif __name__ == '__main__':     try:        main()    finally:        print("done")
查看完整描述

3 回答

?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

一個等差數列(或級數)具有:

  • 一個給定的開始詞語:讓我們把它?F IRST

  • 增量值(任何連續2個詞之間):讓我們把它 d IFF

是一組有序的數字(項),其中每個項可以寫為:

Tk = Tk - 1 + d,從這里開始:

Tk = T1 + (k - 1) * d(雖然我發現它有點不自然,1為第1的元素,所以從索引開始1中,為了使?序列中元件具有索引?(0)

所以:

T1 = f

T2 = f + (2 - 1) * d( )T1 + d

T3 = f + (3 - 1) * d( )T2 + d

T4 = f + (4 - 1) * d

....

Tn - 1 = f + (n - 2) * d

Tn = f + (n - 1) * d

總結所有內容,在=符號的右側

  • f出現n

  • d出現(n - 1) + (n - 2) + ... + 2 + 1,它是數字 til n - 1的總和,可以使用高斯公式計算:(n - 1) * n // 2

  • 對于這種特殊情況,f = 5d = 4

所以,使用這個等差數列屬性,你不需要計算每一項,因此完全不需要遞歸,相反你可以(應該)使用一堆簡單的算術運算。

有關更多詳細信息,請查看[維基百科]:算術級數

翻譯成Python

>>> def sum_arithmetic_sequence(first, diff, count):

...     return count * first + ((count - 1) * count // 2) * diff

...

>>>

>>> sum_arithmetic_sequence(5, 4, 1)

5

>>> sum_arithmetic_sequence(5, 4, 2)

14

>>> sum_arithmetic_sequence(5, 4, 3)

27

>>> sum_arithmetic_sequence(5, 4, 4)

44

或(來自(0)):


>>> def sequence_sum(n):  # I'd add the first and diff arguments as well to keep it general, but for simplicity's sake I'll hardcode them to 5 and 4

...     if n == 1:

...         return 5

...     return 5 + (n - 1) * 4 + sequence_sum(n - 1)

...

>>>


查看完整回答
反對 回復 2021-12-26
?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

你應該試著分解它來理解它。


sequence(3, 0)


# first iteration

a = sequence(2, 0) + 4

# second iteration

a = sequence(1, 0) + 4

# third iteration

return 5


# Now let's work our way backwards


a = 5 + 4 -> 9

a = 9 + 4 -> 13

這就是為什么你會得到 13。這是否足以讓你朝著正確的方向前進?這是另一個提示,請注意您正在返回數字序列而不是它們的總和。


查看完整回答
反對 回復 2021-12-26
?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

您的問題中似乎至少有幾個令人困惑的問題。首先,您將序列公式表示為:


a(n) = n(n-1) + 4

但要獲得您所描述的結果,公式必須是:


a(n) = a(n-1) + 4

其次,您似乎將序列與序列的總和混淆了。讓我們生成序列(遞歸),然后對序列進行運行求和(也遞歸):


def sum_sequence(sequence):


    first, rest = sequence[0], sequence[1:]


    if rest:

        second, rest = rest[0], rest[1:]

        rest = sum_sequence([first + second] + rest)


    return [first] + rest


def generate_sequence(n):

    if n == 1:

        return 5


    return generate_sequence(n - 1) + 4


if __name__ == '__main__':


    sequence = [generate_sequence(n) for n in range(1, 11)]


    print(*sequence, sep=", ", end=", ...\n")


    sums = sum_sequence(sequence)


    print(*sums, sep=", ", end=", ...\n")

輸出


% python3 test.py

5, 9, 13, 17, 21, 25, 29, 33, 37, 41, ...

5, 14, 27, 44, 65, 90, 119, 152, 189, 230, ...

%


查看完整回答
反對 回復 2021-12-26
  • 3 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號