【问题标题】:fibonacci number type斐波那契数类型
【发布时间】:2012-09-17 22:03:00
【问题描述】:

我写了一个计算斐波那契数的程序。最初,由于资源问题,我无法输入大量数字,但现在在我重新编写后,它运行速度很快。但是,如果我使用 ints,一旦我输入大数字,数字就会变成负数。我尝试使用 long,但它们也很快环绕。 如果你不明白我的意思,那么这段代码应该解释一下:

`System.out.println("The 536th fibonacci number: "fib(536));`
`*The 536th fibonacci number: -8757250051716203595*`

显然,在这种情况下,负数是没有意义的,所以我想知道如何才能使它始终工作 - 无论如何都不要回绕。

编辑:问题解决了!

import java.math.BigInteger;
public static BigInteger fib(int n)
{
    return fib2h(n,BigInteger.ONE,BigInteger.ONE);
}


public static BigInteger fibh(int n,BigInteger o,BigInteger p)
{
    if(n==1) return o;
    return fib2h(n-1,p,o.add(p));
}

【问题讨论】:

    标签: java types fibonacci


    【解决方案1】:

    你可以试试 java.math 中的BigInteger

    【讨论】:

      【解决方案2】:

      BigInteger 会帮助你实现你想要的。

      【讨论】:

        【解决方案3】:

        您可以尝试以下(迭代):

        public static BigInteger fib(int n) {
            BigInteger a = BigInteger.ONE;
            BigInteger b = BigInteger.ONE;
            BigInteger c;
            for (int i = 3; i <= n; i++) {
                 c = a.add(b);
                 a = b;
                 b = c;
            }
            return b;
        }
        

        http://blog.paulvargas.org/numeros-fibonacci/中查看更多信息

        【讨论】:

        • 我让它递归,所以我不想要一个迭代解决方案...public static long fib(long n) { fibs=new long[(int)n+1]; return fibh(n-2)+fibh(n-1); } public static long fibh(long n) { if(n==1||n==2) return 1; else if(fibs[(int)n]==0) {fibs[(int)n]=fibh(n-2)+fibh(n-1); return fibs[(int)n];} return fibs[(int)n]; }
        • 递归解决方案可能会出现问题,因为它会产生大量调用,这会消耗大量内存。如果你想要,试试这个:public static BigInteger f(int n) { if (n == 0) return BigInteger.ZERO; if (n == 1) return BigInteger.ONE; return f(n-1).add(f(n-2)); }
        • Paul,我的电话没有爆炸式增长,因为我是按照下面粘贴的方式写的。但是,我不知道如何将 BigInteger 集成到我的解决方案中。 public static int fib(int n) { return fibh(n,1,1); } public static int fib2h(int n,int o,int p) { if(n==1) return o; return fib2h(n-1,p,o+p); }
        【解决方案4】:

        你可以使用java.lang.BigInteger

        【讨论】:

          【解决方案5】:

          我解决了我的问题! 我做了什么:

          import java.math.BigInteger;
          public static BigInteger fib(int n)
          {
              return fib2h(n,BigInteger.ONE,BigInteger.ONE);
          }
          
          
          public static BigInteger fibh(int n,BigInteger o,BigInteger p)
          {
              if(n==1) return o;
              return fib2h(n-1,p,o.add(p));
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-06-05
            • 2014-05-23
            • 2014-05-03
            • 1970-01-01
            • 2012-12-29
            • 1970-01-01
            相关资源
            最近更新 更多