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 = 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)
...
>>>
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。这是否足以让你朝着正确的方向前进?这是另一个提示,请注意您正在返回数字序列而不是它们的总和。
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, ...
%
添加回答
举报
