我试图解读以下的作业问题。我的代码应该评估为190,而是评估为114.所以,我不认为我理解编码要求。
Collatz猜想是一个简单的计算过程的例子,其行为是如此不可预测,以至于世界上最好的数学家仍然不理解它。
考虑简单函数
f(n)
(如上面的维基百科页面中所定义),它取整数n
并将其除以2,如果n
为偶数并将n
乘以3,然后如果n
为奇数则将结果加1。该猜想涉及研究f(f(f(...f(f(n)))))
形式的表达式的值,因为函数f
的调用次数增加。猜想是,对于任何非负整数n
,f
重复应用于n
会产生一系列整数,总是包含1。您对此问题的任务是在Python中实现Collatz函数
f
。实现的关键是通过检查n
除以2时的余数是零还是一,来构建一个确定n
是偶数还是奇数的测试。提示:您可以使用余数opertor%
通过表达式n % 2
在Python中计算此余数。注意,在计算//
时,您还需要使用整数除法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))
你只是误读了中间问题。你的程序试图回答更大的问题......这应该返回190
:
def f(n):
return n // 2 if n % 2 == 0 else 3*n + 1
print f(f(f(f(f(f(f(674)))))))