[英]How does this while-loop compute? (x = function(x))
我正在从“用Python自动化无聊的东西”中进行测验,在对问题进行了修补后,我终于找到了一个可行的解决方案(在我的comp-sci伙伴的帮助下)。 测验要求我编写执行Collatz序列的程序。
我理解所有代码背后的逻辑,除了最后一行。
这是我的代码,带有一些注释:
def collatz(number):
if number % 2 == 0:
print(number // 2)
return number // 2
elif number % 2 == 1:
print(3 * number + 1)
return 3 * number + 1
guess = input("Your guess please ")
while guess != 1:
guess = collatz(int(guess))
程序的输出是一个数字序列,因为while循环以某种方式重新迭代了函数的返回值,并将其用于其他计算。
我的问题是最后一行。 这是我的理解方式:
另外,这就是所谓的“递归”吗?
简短答案:
是。
更长的答案:(仍然很短)
collatz
函数返回一个分配给guess
的值。
同样,这不称为递归,递归是一个自称的函数。
首先,不,这不是递归。 递归是一个自我调用的函数。
例如,这是一个递归:
def fibonacci(n):
if n == 0:
return 0
if n == 1:
return 1
return fibonacci(n-1) + fibonacci(n-2)
如您在这里看到的,fibonacci函数将调用fibonacci函数...但是它也有退出条件(n == 0,n == 1)。 否则,这将导致运行时错误,并提示消息已超过最大递归深度。 但是,如果我没记错的话,您可以使用以下命令检查最大递归深度:
import sys
print(sys.getrecursionlimit())
在我的计算机上,这个数字是1000。如果这个数字对您来说太小,您也可以使用以下命令进行设置:
sys.setrecursionlimit(n)
关于其他事情。 您的函数正在返回一些计算值,并且在您的主循环中,这将分配给变量猜测。 因此,每次主循环都会通过,猜测值也会更新
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.