3

我弄完了:

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

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

4

2 回答 2

2

问题是您只在执行 while 循环后打印在函数开始时seq设置为的内容。n因此,您只能获得打印一次的值。

您应该在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
于 2015-10-22T04:02:39.727 回答
1
  • 您需要为循环中的每一步打印一次。您的 print 语句您的 while 循环之外,因此它只触发一次。
  • 此外,您想打印在此函数中永远不会n发生变化的值。seq
  • 在那张纸条上,您甚至不需要seq,因为您从不使用它!
  • 两条线if n == 1: n = n什么都不做。即使n==1,将 n 设置为自身也不会改变值。
于 2015-10-22T03:54:31.753 回答