此功能的目标是计算执行操作后数字达到1所需的步数。如果数字是偶数,则放入函数的数字除以2,如果数字为奇数,则加倍并增加1。对数字执行这些操作直到达到一个。例如,如果您从数字3开始,则将执行以下步骤:3> 10> 5> 16> 8> 4> 2> 1>该函数将需要返回数字“8 “因为在划分偶数并乘以3并将1加到奇数后,3乘以8得到1。
到目前为止,这是我的代码。我知道如何让我的函数返回第一步(例如:我可以有3返回10和6返回3)但我无法弄清楚如何让我的函数计算达到1所需的步数。
def collatz_counts(n):
total = 0
while n > 1:
if n % 2 == 0:
n =(n // 2)
total += 1
elif n % 2 == 1:
n = (3 * n + 1)
total += 1
return total
答案 0 :(得分:0)
您需要调整代码,使其在while
循环后返回。否则,如果它遇到奇数,它会过早返回。
此外,total += 1
在两种情况下均已完成;你可以将它移出if .. elif ..
块。
def collatz_counts(n):
total = 0
while n > 1:
if n % 2 == 0:
n =(n // 2)
elif n % 2 == 1:
n = (3 * n + 1)
total += 1 # <---
return total # <---
BTW,collatz_counts(3)
将返回7.您需要将初始total
值调整为1才能获得8。