使用 python 打印正整数 n 的 collat​​z 序列,每行一个值在 1 处停止

Print the collatz sequence of a positive int, n, one value per line stoping at 1 using python

我已经完成了:

def collatz(n):
    seq = n
    if n == 1:
        n = n
    while n > 1:
       if n % 2 == 0:
           n = n // 2
       else:
           n = 3 * n + 1
    print(seq)

调用此函数的正确输出,当 n = 10 时:

collatz(10)
10
5
16
8
4
2
1

但唯一打印的数字是它本身。

  • 您需要为循环中的每个步骤打印一次。您的打印语句 在您的 while 循环之外 因此它只触发一次。
  • 此外,您想打印正在变化的值 n 而不是 seq,这在这个函数中永远不会发生。
  • 关于这一点,您甚至不需要 seq,因为您从不使用它!
  • 这两行if n == 1: n = n什么都不做。即使 n==1,将 n 设置为自身也不会更改值。

问题是在 while 循环执行后,您只打印在函数开始时设置为 nseq。因此,您只打印一次值。

您应该在 while 循环内以及开始时打印值(对于第一个 10 打印)。例子-

def collatz(n):
    print(n)
    while n > 1:
       if n % 2 == 0:
           n = n // 2
       else:
           n = 3 * n + 1
       print(n)

演示 -

>>> def collatz(n):
...     print(n)
...     while n > 1:
...        if n % 2 == 0:
...            n = n // 2
...        else:
...            n = 3 * n + 1
...        print(n)
...
>>> collatz(10)
10
5
16
8
4
2
1