至尊宝的传说
一个等差数列(或级数)具有:一个给定的开始词语:让我们把它˚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)...>>>
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, ...%