Python collatz猜想中的步数计算

Python collatz猜想中的步数计算,python,Python,我想知道从n(在示例15中)到1所需的总步骤。 到目前为止,我已经做到了这一点: def collatz(n): print(n) c = 0 while n != 1: if n % 2 == 0: n = n // 2 c += 1 yield(n) yield ('{%d}' % c) else: n = n * 3

我想知道从n(在示例15中)到1所需的总步骤。
到目前为止,我已经做到了这一点:

def collatz(n):
    print(n)
    c = 0
    while n != 1:
        if n % 2 == 0:
            n = n // 2
            c += 1
            yield(n)
            yield ('{%d}' % c)
        else:
            n = n * 3 + 1
            c += 1
            yield(n)
            yield ('{%d}' % c)


print(list(collatz(15)))
这就是我得到的。它提供了所有步骤,但我只需要它们的总数(在示例17中)


只需将<代码>列表反向<代码>即可:

print(reversed(list(collatz(15))))
要获取最后一个号码:

print(list(collatz(15))[-1]) #for '{17}'
print(list(collatz(15))[-2]) #for 1

不要用计数污染你的输出。相反,从iterable外部计算iterable中的元素

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

print(len(list(collatz(15))))  # More obvious what's happening
# 17
print(sum(1 for _ in collatz(15)))  # Doesn't keep a list of results we don't care about
# 17
试试这个:-

def collatz(n):
    var = 0
    while n != 1:
        if n % 2 == 0:
           n = n // 2
           var  += 1
        else:
            n = n * 3 + 1
            var += 1
    return var

print(collatz(32)) # output --> 5

等等,这个例子中的
c
是什么?它在任何地方都没有定义。
def collatz(n):
    var = 0
    while n != 1:
        if n % 2 == 0:
           n = n // 2
           var  += 1
        else:
            n = n * 3 + 1
            var += 1
    return var

print(collatz(32)) # output --> 5