Python 3递归-超过最大深度

Python 3递归-超过最大深度,python,python-3.x,recursion,Python,Python 3.x,Recursion,我正在编写一个基本的递归函数,它接受一个整数n,并返回前n个倒数的和。输入2应得到1.5,输入0应返回0 总和2=1+1/2=1.5 以下是我所拥有的: def sum_to(n): if n>0: return sum_to(1+1/n) # Not sure if this is correct return 0 但我得到的只是超过了最大递归深度。我知道我可以用列表来解决这个问题,但是递归非常有趣,我想用它来找到一个解决方案 追踪它,看看你是否达到了最

我正在编写一个基本的递归函数,它接受一个整数n,并返回前n个倒数的和。输入2应得到1.5,输入0应返回0

总和2=1+1/2=1.5

以下是我所拥有的:

def sum_to(n):
    if n>0:
        return sum_to(1+1/n) # Not sure if this is correct
    return 0

但我得到的只是超过了最大递归深度。我知道我可以用列表来解决这个问题,但是递归非常有趣,我想用它来找到一个解决方案

追踪它,看看你是否达到了最终状态:

PS:在我写这篇文章的时候,问题的代码是返回1+sum\u到1/n

你的函数永远不会返回。如果您有无限的时间和空间来完成计算,那么结果将是无限的,因为算法没有终点

对于您的示例,只需这样写:

def sum_to(n):
    return 1 + 1/n

当n>2时,预期结果是什么?这将决定如何组织工作代码。

从问题来看,您似乎想要计算

\sum_{i=1}^{n} 1/i
如果输入为0,则返回0

请记住,在递归函数中,您需要定义基本情况和归纳子句

在你的问题中,归纳从句是:

1.0 / i + sum_of_reciprocals(i-1)
当i=0时,基本情况可以设置为0

根据此公式,带有示例的函数如下所示:

def sum_to(n):
    if n > 0:
        return sum_to(n-1) + 1.0 / n
    else:
        return 0

if __name__ == '__main__':
    print(sum_to(3))
结果为1.83333


有关递归函数的详细信息,请从开始。

不确定这是否正确,您应该这样做。根据你的程序,和1等于1+和1。你不确定这是否正确吗?这是否与你的问题有关?如果继续添加1,n是否会等于0?如果n>0,则返回和\u ton-1+1/n,否则0请不要将您的返回0更改为打印0;现在,当n达到0时,函数将返回None,加法将失败。您需要从每个条件返回一个数字。所以只要撤销编辑:谢谢,我现在看到错误了。预期结果应该是n个倒数的总和。例如,总和2=1+1/2,其中总和3=1+1/2+1/3。我把问题的措辞弄错了。我基本上想找到倒数,直到倒数为1/n,然后停在这里,所以在x位置的任何给定项的值都是1/x。第一项为1/1==1,第二项为1/2,第三项为1/3。所以你想要返回1/n+sum_ton-1,因为每个项都有一个连续的位置。这在阿尔贝托的回答中得到了更好的解释。非常感谢。简明扼要。非常感谢链接的wiki页面,当我现在创建更多的练习递归时,它肯定会帮助我。
def sum_to(n):
    if n > 0:
        return sum_to(n-1) + 1.0 / n
    else:
        return 0

if __name__ == '__main__':
    print(sum_to(3))