【发布时间】:2017-12-19 08:31:53
【问题描述】:
我正在尝试破译以下作业问题。我的代码应该评估为 190,而是评估为 114。所以,我认为我没有理解编码要求。
Collatz 猜想是一个简单计算过程的例子 他们的行为如此不可预测,以至于世界上最好的 数学家还是不明白。
考虑简单的函数
f(n)(定义在维基百科页面 上面)取一个整数n,如果n是偶数,则将其除以二并且 如果n是奇数,则将n乘以3,然后将结果加一。这 猜想涉及研究形式表达式的值f(f(f(...f(f(n)))))作为对函数f的调用次数 增加。猜想是,对于任何非负整数n, 重复应用f到n会产生一个整数序列 总是包含 1。你对这个问题的任务是实现 Collatz 函数
fin Python。实现的关键是构建一个测试 通过检查余数是否确定n是偶数还是奇数 当n除以 2 时,要么是零要么是一。提示:你可以计算 这个余数在 Python 中使用余数运算符%通过 表达式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))
【问题讨论】:
-
您还没有实现
f,而是一个完全不同的(尽管相关的)功能。f应该只计算序列中的下一项,而不是整个序列。