Collatz 功能未正确退出
Collatz function not exiting correctly
这是一个程序,旨在递归地计算 Collatz 序列的长度:
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。程序按预期运行:使用 even_collatz
和数字 10.
调用 collatz_counter
下一步的预期操作是 运行 collatz_counter
,initialNumber
为 1,initialLength
为 10。我期望会发生什么是第一个 if 语句的计算结果为真,collatz_counter
应该 return length
然后退出。然而,这不是发生的事情:
实际发生的是函数对第一个if语句求值,运行是return length
行,然后跳转到if initialNumber % 2...
下的代码行和整个过程在无限循环中一遍又一遍地重复自己。
关于为什么会发生这种情况有什么想法吗?
我觉得像是打字错误。您定义了一个需要两个数字的函数 collatz_counter
。
但是你这样称呼它:
...
print(collatz_counter(13), 1)
只需尝试将最后一行更改为:
print(collatz_counter(13, 1))
而且应该没问题。
希望对您有所帮助!
您以一种有点奇怪的方式混合了递归和循环。问题是while True:
。因为你从不 return 循环内的任何东西,所以没有什么能阻止它永远继续下去。您的代码达到 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))
主要错误是while True:
循环,再加上缺少returns.
def odd_collatz ( n ):
return (3 * n) + 1
def even_collatz ( n ):
return int(n / 2)
def collatz_counter(initialNumber, length):
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))
打印 10。
这是一个程序,旨在递归地计算 Collatz 序列的长度:
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。程序按预期运行:使用 even_collatz
和数字 10.
collatz_counter
下一步的预期操作是 运行 collatz_counter
,initialNumber
为 1,initialLength
为 10。我期望会发生什么是第一个 if 语句的计算结果为真,collatz_counter
应该 return length
然后退出。然而,这不是发生的事情:
实际发生的是函数对第一个if语句求值,运行是return length
行,然后跳转到if initialNumber % 2...
下的代码行和整个过程在无限循环中一遍又一遍地重复自己。
关于为什么会发生这种情况有什么想法吗?
我觉得像是打字错误。您定义了一个需要两个数字的函数 collatz_counter
。
但是你这样称呼它:
...
print(collatz_counter(13), 1)
只需尝试将最后一行更改为:
print(collatz_counter(13, 1))
而且应该没问题。
希望对您有所帮助!
您以一种有点奇怪的方式混合了递归和循环。问题是while True:
。因为你从不 return 循环内的任何东西,所以没有什么能阻止它永远继续下去。您的代码达到 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))
主要错误是while True:
循环,再加上缺少returns.
def odd_collatz ( n ):
return (3 * n) + 1
def even_collatz ( n ):
return int(n / 2)
def collatz_counter(initialNumber, length):
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))
打印 10。