下面是一个用于递归计算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。程序按预期运行:collatz_counter
使用even_collatz
和数字10调用。你知道吗
下一步的预期操作是运行collatz_counter
,initialNumber
为1,initialLength
为10。我希望第一个if语句的计算结果为true,collatz_counter
应该返回length
,然后退出。然而,情况并非如此:
实际情况是,函数计算第一个if语句,运行return length
行,然后跳到if initialNumber % 2...
下的代码行,整个过程在一个无限循环中一遍又一遍地重复。你知道吗
你知道为什么会这样吗?你知道吗
在我看来像是错别字。定义一个
collatz_counter
函数,它需要两个数字。你知道吗但你这样称呼它:
试着把最后一行改成:
应该没事的。你知道吗
希望这有帮助!你知道吗
主要错误是
while True:
循环,加上缺少返回。你知道吗打印10。你知道吗
你正在以一种奇怪的方式混合递归和循环。问题是
while True:
。因为你永远不会从循环中返回任何东西,所以没有什么能阻止它永远继续下去。你的代码达到1,然后继续增加长度。这是一个固定的版本。你知道吗相关问题 更多 >
编程相关推荐