序列功能错误?

时间:2016-10-08 00:29:49

标签: function

我在第3行遇到错误“TypeError:'int'对象不可迭代,”它一直困扰着我。任何建议/修复都表示赞赏。

示例测试:collat​​z_counts(4)→3#4 - > 2 - > 1(3个步骤)

我的代码:

def collatz_counts(x):
    num = 0    
    for i in (x):
        if i == 1:
            num += 1
            return num
        elif i % 2 == 0:
            num(i) / 2
            num += 1
            num.append(i)
        else:
            num = (i*2) + 3
            num += 1
            num.append(i)     
    return num

2 个答案:

答案 0 :(得分:2)

这可以递归解决:

def collatz_length(n):
    if n == 1:
        return 1
    return 1 + collatz_length(3*n+1 if n%2 else n//2)

如果您打算要求一系列数字,例如,这会使自己成为备忘录,例如在Py3中

import functools as ft

@ft.lru_cache(maxsize=None)
def collatz_length(n):
    if n == 1:
        return 1
    return 1 + collatz_length(3*n+1 if n%2 else n//2)

对于迭代解决方案,大约2.31s与约28.6s之间的第一百万个collat​​z序列将会运行。

答案 1 :(得分:0)

使用while循环。只需修改x,直至到达1,并在每次运行周期时跟踪steps的数量。

def collatz_counts(x):
    steps = 0
    while x != 1:
        if x % 2:
            x = x * 3 + 1
        else:
            x = x // 2
        steps += 1
    return steps