试图解决 ch 末尾的 collatz 序列项目。 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
,只是打印下一次迭代。这会产生两个问题:
- 循环是无限的,因为
number
永远不会改变。
- 您永远不会通过第一次迭代,因为您在递归中传递了相同的
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)
起初我没有包含 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
,只是打印下一次迭代。这会产生两个问题:
- 循环是无限的,因为
number
永远不会改变。 - 您永远不会通过第一次迭代,因为您在递归中传递了相同的
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)