【问题标题】:Understanding Collatz Conjecture Objective in Python理解 Python 中的 Collat​​z 猜想目标
【发布时间】:2017-12-19 08:31:53
【问题描述】:

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

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

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

你对这个问题的任务是实现 Collat​​z 函数f in 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 应该只计算序列中的下一项,而不是整个序列。

标签: python algorithm


【解决方案1】:

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

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多