-1

我写了一个这样的函数:

def collatz(number):
    '''
        Function takes a positive integer x as input and prints the Collatz sequence starting at x
    '''
    while True:
        if number % 2 == 0: # If number is even
            number = number/2
            return number
        elif number == 1:
            break
        else:
            number =  3*number+1
            return number

该函数应该返回这样的数字:

collatz(10)
10
5
16
8
4
2
1

此函数适用于以下公式:

X={x/2 if x is even , if 3x+1  if x is odd

现在它只返回 1 个数字。怎么了?

4

2 回答 2

1

在函数返回某些内容后,它会立即中断。考虑使用yield

def collatz(number):
    '''
        Function takes a positive integer x as input and prints the Collatz sequence starting at x
    '''
    while True:
        if number % 2 == 0: # If number is even
            number = number/2
            yield number
        elif number == 1:
            break
        else:
            number =  3*number+1
            yield number

然后这将返回一个带有数字的生成器。您可以list(collatz(n))获取数字列表。

于 2013-11-10T02:35:08.237 回答
0

当你返回意味着函数完成的东西时

您可以只append将数字放到一个列表中,然后返回数字列表,这样它将完成 while 循环的所有迭代,而不是在一个之后停止

于 2013-11-10T02:37:59.747 回答