猿问

返回错误结果的序列的递归求和

我试图检索一个等差数列的前 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 = 27

def sequence(n, sum):

    if (n == 1):

        return 5

    else:

        a = sequence(n-1, sum) + 4

        sum += a

        print(sum)

        return a



if __name__ == '__main__': 

    try:

        main()

    finally:

        print("done")


HUWWW
浏览 250回答 3
3回答

至尊宝的传说

一个等差数列(或级数)具有:一个给定的开始词语:让我们把它˚F IRST增量值(任何连续2个词之间):让我们把它 d IFF是一组有序的数字(项),其中每个项可以写为:Tk = Tk - 1 + d,从这里开始:Tk = T1 + (k - 1) * d(虽然我发现它有点不自然,Ť 1为第1日的元素,所以从索引开始1中,为了使Ñ个序列中元件具有索引Ñ)(0)所以:T1 = fT2 = f + (2 - 1) * d( )T1 + dT3 = f + (3 - 1) * d( )T2 + dT4 = f + (4 - 1) * d....Tn - 1 = f + (n - 2) * dTn = f + (n - 1) * d总结所有内容,在=符号的右侧:f出现n次d出现(n - 1) + (n - 2) + ... + 2 + 1,它是数字 til n - 1的总和,可以使用高斯公式计算:(n - 1) * n // 2对于这种特殊情况,f = 5和d = 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)...>>>

Cats萌萌

你应该试着分解它来理解它。sequence(3, 0)# first iterationa = sequence(2, 0) + 4# second iterationa = sequence(1, 0) + 4# third iterationreturn 5# Now let's work our way backwardsa = 5 + 4 -> 9a = 9 + 4 -> 13这就是为什么你会得到 13。这是否足以让你朝着正确的方向前进?这是另一个提示,请注意您正在返回数字序列而不是它们的总和。

POPMUISE

您的问题中似乎至少有几个令人困惑的问题。首先,您将序列公式表示为: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] + restdef generate_sequence(n):    if n == 1:        return 5    return generate_sequence(n - 1) + 4if __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.py5, 9, 13, 17, 21, 25, 29, 33, 37, 41, ...5, 14, 27, 44, 65, 90, 119, 152, 189, 230, ...%
随时随地看视频慕课网APP

相关分类

Python
我要回答