试图解决 ch 末尾的 collat​​z 序列项目。 3 来自 "automate the boring stuff with python"

Trying to solve the collatz sequence project at the end of ch. 3 from "automate the boring stuff with python"

起初我没有包含 while 循环,我必须重新运行 程序使用上一次的值(即它不会通过循环回收结果)所以我添加了 while 循环来尝试更正它。现在,当我 运行 它时,它陷入了无限循环。全新的尝试弄清楚这些东西。提前致谢。 该项目的说明位于此 link
的底部 https://automatetheboringstuff.com/2e/chapter3/

def collatz(number):
    if number % 2 == 0:
        print(number // 2)
    elif number % 2 != 0:
        print(3 * number + 1)

    while number != 1:
        collatz(number)

number = int(input('enter a number:')  )
collatz(number)

您永远不会在函数中更新 number,只是打印下一次迭代。这会产生两个问题:

  1. 循环是无限的,因为 number 永远不会改变。
  2. 您永远不会通过第一次迭代,因为您在递归中传递了相同的 number 值。当你设计递归算法时,递归中的参数需要让你更接近基本情况,所以你不能只传递你收到的相同值。

您不需要 while 循环,因为递归执行迭代。您只需要更改函数,使其在递归时传递下一个值。

def collatz(number):
    print(number)
    if number == 1:
        return
    if number % 2 == 0:
        collatz(number // 2)
    elif number % 2 != 0:
        collatz(3 * number + 1)

number = int(input('enter a number:')  )
collatz(number)