计算直到数字达到1的步数

时间:2016-10-08 01:19:19

标签: python numbers counting operations

此功能的目标是计算执行操作后数字达到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

1 个答案:

答案 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。