Python 一个(递归)函数,用于计算给定n的和
如何编写递归函数来计算给定n的和Python 一个(递归)函数,用于计算给定n的和,python,python-3.x,math,Python,Python 3.x,Math,如何编写递归函数来计算给定n的和 n ∑ 1/k k=1 我的代码: def sum(n): if n == 0: return 0 elif n == 1: return 1 else: return sum(1/n) + sum(1/n+1) print(sum(3)) 对于n=3而言,输出应为:1.8333333您应避免声明名为sum的新函数,因为已存在具有此名称的内置函数 您可以递归地计算 n
n
∑ 1/k
k=1
我的代码:
def sum(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return sum(1/n) + sum(1/n+1)
print(sum(3))
对于
n=3
而言,输出应为:1.8333333
您应避免声明名为sum
的新函数,因为已存在具有此名称的内置函数
您可以递归地计算
n n-1
∑ 1/k == 1/n + ∑ 1/k
k=1 for n > 0 k=1
与
def my_recursive_sum(n):
如果n您的解决方案将很容易达到最大递归限制
当您使用1/n和1/n+1再次调用函数时,您将使用相同的n并增加它,因此您永远不会达到结束条件。
下一对总和的n值永远不会等于0或1
此外,您不应再次调用带有1/n的函数,否则将在函数调用中永远循环
您应该使用以下内容:
>>> def my_sum(n):
... if n < 1:
... return 0
... return 1/n + my_sum(n-1)
...
>>> print(my_sum(3))
1.8333333333333333
>>> 11/6
1.8333333333333333
>>>
>>定义我的金额(n):
... 如果n<1:
... 返回0
... 返回1/n+我的金额(n-1)
...
>>>打印(我的金额(3))
1.8333333333333333
>>> 11/6
1.8333333333333333
>>>
编辑:
就像在另一个答案中提到的那样,你应该避免使用sum作为函数名,因为它是python已经使用过的名称你能编辑你的sum符号吗?你不清楚你要生成什么序列。你能准确地提到你的方程吗?考虑到n=3的输出应该是11/6,我猜你想要sum_{k=1到n}1/k;i、 例如,1+1/2+1/3+…+1/n?你应该重新考虑调用你的函数sum
,因为那是一个内置函数的名字。在这种情况下,请注意python并不是一种很好的递归语言;python中已经有了一个;您可以通过使用这个内置函数和列表理解来实现您想要的,就像返回sum(1/k表示范围(n+1)中的k)一样。
为什么sum(0)
返回0?那么sum(-12)
?@Stef这就是sum的定义。它从k=1
开始,上升到n
。如果n
总和为0。还应警告不要使用sum
作为函数名称sum
在python中已经是一个内置项的名称,隐藏内置项是危险的。@Stef我想你的意思是n<1而不是n
可以简单地替换为if n<1:return 0
。另外,请不要鼓励使用sum
作为自定义函数的名称;这已经是python中内置函数的名称。谢谢@Stef;)
>>> def my_sum(n):
... if n < 1:
... return 0
... return 1/n + my_sum(n-1)
...
>>> print(my_sum(3))
1.8333333333333333
>>> 11/6
1.8333333333333333
>>>