理解Python中的Collat​​z猜想目标

时间:2017-12-19 08:31:54

标签: python algorithm

我正在尝试破译以下作业问题。我的代码应该评估为190,而是评估为114.所以,我不认为我理解编码要求。

  

Collat​​z猜想是一个简单计算过程的例子   他们的行为是如此不可预测,以至于世界上最好的   数学家仍然不理解。

     

考虑简单函数f(n)(如维基百科页面中所定义)   如果n是偶数,则取整数n并将其除以2   将n乘以3,如果n为奇数,则将结果加1。该   猜想涉及研究形式表达的价值   f(f(f(...f(f(n)))))作为函数f的调用次数   增加。猜想是,对于任何非负整数n,   重复应用fn会产生一系列整数   总是包括1。

     

此问题的任务是在中实现Collat​​z功能f   蟒蛇。实现的关键是构建一个测试   通过检查余数是否确定n是偶数还是奇数   当n除以2时,为零或一。提示:你可以计算   这个余数在Python中使用余数opertor %通过   表达n % 2。请注意,您还需要使用整数除法//   在计算f

时      

实施f后,请测试您的实施   表达f(f(f(f(f(f(f(674)))))))。这个表达式应该评估   到190

from __future__ import division


def collatz(n):
    l = []
    l.append(n)
    while n != 1:

        if n % 2 == 0:
            n = n // 2
            l.append(n)

        else:
            n = (3*n) + 1
            l.append(n)
    return l


print len(collatz(674))

1 个答案:

答案 0 :(得分:2)

你只是误读了中间问题。您的程序试图回答更大的问题......这应该返回190

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


print f(f(f(f(f(f(f(674)))))))