【发布时间】:2017-10-08 08:33:40
【问题描述】:
我正在创建一个带有递归函数的 collatz 序列:
def collatz(n):
if n%2 == 0:
return int(n/2)
else:
return int((3 * n)/2)
据我了解,递归函数是一个基本上调用自身的函数。下面我尝试使用以下方法创建递归函数:
def collatz(x):
if x == 1:
"Done"
print(x)
x = collatz(x)
return(x)
本质上,变量 x 继续传递到我定义的 collatz 函数中,直到它达到 1。但是,每次我运行递归函数时,它都会重复打印 'x',然后我得到了
collatz(3)
'RecursionError: maximum recursion depth exceeded in comparison'
我的理解本质上是一个无限循环。我想通过将其重新分配给 x 到第一个 collatz() 的结果,它会返回新值并继续直到它达到 '1' 但我似乎无法到达那里。
任何帮助/提示/建议都会很棒!谢谢!
【问题讨论】:
-
您收到错误是因为您从定义中调用函数 - 您尚未完成定义函数,您应该从函数外部调用它(缩进)。
-
我不太听你的解释。函数的哪一部分没有定义?我刚刚对原始帖子进行了编辑,显示了我在哪里调用 collatz 函数。
-
在手机上打字,抱歉..您在函数 collatz 中有 collatz(x),因此出现错误。在函数外部调用 collatz(x),这意味着不要缩进它以便成为您定义的函数的一部分。
-
你会发现你没有复制你的示例函数。靠近计算机时会更新。
-
@mikey 他显然正在这样做,因为如果他没有这样做,那么他观察到的错误就是缺少输出。
标签: python python-3.x function recursion collatz