打印一个正int,n的collat​​z序列,每行使用python以1停止一个值

时间:2015-10-22 03:46:52

标签: python int collatz

我做完了:

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)

用于调用此函数的corrct输出,而n = 10:

collatz(10)
10
5
16
8
4
2
1

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

2 个答案:

答案 0 :(得分:2)

问题是你只打印seq,在执行while循环后,在函数开始时设置为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

答案 1 :(得分:1)

  • 您需要为循环中的每个步骤打印一次。您的打印语句之后循环,因此它只会触发一次。
  • 此外,您还要打印正在更改n而不是seq的值,此值绝对不会出现在此函数中。
  • 就此而言,您甚至不需要seq,因为您从未使用它!
  • 两行if n == 1: n = n没有做任何事情。即使n==1,将n设置为自身也不会更改该值。