我正在尝试破译以下作业问题。我的代码应该评估为190,而是评估为114.所以,我不认为我理解编码要求。
Collatz猜想是一个简单计算过程的例子 他们的行为是如此不可预测,以至于世界上最好的 数学家仍然不理解。
考虑简单函数
f(n)
(如维基百科页面中所定义) 如果n
是偶数,则取整数n
并将其除以2 将n
乘以3,如果n
为奇数,则将结果加1。该 猜想涉及研究形式表达的价值f(f(f(...f(f(n)))))
作为函数f
的调用次数 增加。猜想是,对于任何非负整数n
, 重复应用f
到n
会产生一系列整数 总是包括1。此问题的任务是在中实现Collatz功能
时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))
答案 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)))))))