理解Python中的Collat z猜想目标

问题描述 投票:1回答:1

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

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

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

您对此问题的任务是在Python中实现Collat​​z函数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))
python algorithm
1个回答
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)))))))
© www.soinside.com 2019 - 2024. All rights reserved.