gpt4 book ai didi

python - Collat​​z 功能未正确退出

转载 作者:行者123 更新时间:2023-11-28 21:45:41 25 4
gpt4 key购买 nike

这是一个旨在递归计算 Collat​​z 序列长度的程序:

def odd_collatz ( n ):
return (3 * n) + 1

def even_collatz ( n ):
return int(n / 2)

def collatz_counter ( initialNumber, initialLength ):
length = initialLength

while True:
if initialNumber == 1:
return length

elif initialNumber != 1:
length += 1

if initialNumber % 2 == 0:
collatz_counter(even_collatz(initialNumber), length)

else:
collatz_counter(odd_collatz(initialNumber), length)

print(collatz_counter(13, 1)

预期的答案应该是 10。但是,程序陷入了无限循环。在序列的倒数第二步 initalNumber等于 2。程序按预期运行:collatz_counter使用 even_collatz 调用和数字 10。

下一步的预期操作是运行 collatz_counterinitialNumber 1 和一个 initialLength的 10。我期望会发生的是第一个 if 语句的计算结果为真,collatz_counter应该返回 length然后退出。然而,这不是发生的事情:

实际发生的是函数计算第一个 if 语句,运行 return length行,然后跳转到if initialNumber % 2...下的代码行整个过程在无限循环中一遍又一遍地重复。

关于为什么会发生这种情况有什么想法吗?

最佳答案

您以一种有点奇怪的方式混合了递归和循环。问题是 while True:。因为你永远不会从循环中返回任何东西,所以没有什么可以阻止它永远继续下去。您的代码达到 1 然后不断增加长度。这是固定版本。

def odd_collatz ( n ):
return (3 * n) + 1

def even_collatz ( n ):
return int(n / 2)

def collatz_counter ( initialNumber, initialLength ):
length = initialLength


if initialNumber == 1:
return length

elif initialNumber != 1:
length += 1

if initialNumber % 2 == 0:
return collatz_counter(even_collatz(initialNumber), length)

else:
return collatz_counter(odd_collatz(initialNumber), length)

print(collatz_counter(13, 1))

关于python - Collat​​z 功能未正确退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39057369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com