Python collatz猜想中的步数计算
我想知道从n(在示例15中)到1所需的总步骤。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
到目前为止,我已经做到了这一点:
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