java - 用java解决3n+1

标签 java collatz

我正在尝试解决java中的3n+1问题。 UVA 显示我的代码的运行时错误。我第一次尝试解决问题,但无法找出问题所在。我使用网站上给出的输入对其进行了测试,并且它有效。是否因为我的代码运行缓慢而被拒绝?如果是这样,如何优化?

PFB我的代码

import java.util.*;

class solution {


public static int[] clength = new int[1000000];

public static long nextnum(long n)
{

    if(n%2==0)
    {
        return n/2;
    }
    else
        return 3*n+1;
}

public static long cyclelength(long n)
{

    if(n==1)
    {
        return 1;

    }
    if (n < 1000000 && clength[(int)n] != 0)
    {
        return clength[(int)n];

    }
    long length= (1+ cyclelength(nextnum(n)));
    if (n < 1000000)
        clength[(int)n] = (int) length;

    return length;
}

public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    Scanner in = new Scanner(System.in);

    while(in.hasNext())
    {
        int a=in.nextInt();
        int b=in.nextInt();
        int min=Math.min(a, b);
        int max=Math.max(a, b);
        int count=0;

        for(int n=min;n<=max;n++)
        {
            count=(int) Math.max(count,cyclelength(n));

        }
        System.out.println(a + " " + b +" " +count );
    }
}

}

最佳答案

尽管问题陈述指出,在那些远大于 1,000,000 的未指定数字中,没有已知的数字使给定序列无法终止,但它没有讨论它们的循环长度是多少。我想你会发现有些数字确实有很长的周期长度。

虽然您似乎很好地利用了内存来避免冗余计算,但递归地构造计算会使您面临调用堆栈溢出的风险,这可能只需要几万的循环长度。此外,方法调用比简单分支要昂贵得多,因此您的递归方法也可能比迭代方法慢。

关于java - 用java解决3n+1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33070077/

相关文章:

python - 用于创建 collat​​z 图的长时间运行的 python 脚本

algorithm - 为什么我的数字在 Collat​​z 序列中只停留在 2?

java - 在 Java 中写入文件时使用插入排序

java - Google Vision API - OCR - 单独的段落/行问题 (Java)

java - 这里需要多线程: More students submitting their response to store in database

java - 为什么 java 程序会在 113882 上卡住?

c++ - 有没有办法将 Collat​​z 猜想优化为无分支算法?

python - Collat​​z 序列 - 最后得到 None

java - Java中的字符串isNullOrEmpty?

java - Maven 依赖奇怪的错误