Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一个(递归)函数,用于计算给定n的和_Python_Python 3.x_Math - Fatal编程技术网

Python 一个(递归)函数,用于计算给定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的和

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
>>>