使用BigInteger获取Fibonacci系列而不使用递归

时间:2018-01-28 22:02:11

标签: java arrays fibonacci

这里的所有初学者程序员都好,很难计算一个没有递归的斐波纳契系列。

我的主要问题是使用BigInteger。这是我的代码:

import java.math.BigInteger;
public class Fibonacci
{
   public void fibonacci(int n)
   {
      int[] arr = new int[n + 1];

      arr[0] = 0;
      arr[1] = 1;
      arr[2] = 1;

      for(int i = 3; i <= n; i++)
      {
         arr[i] = arr[i-1] + arr[i-2];             
      }

      System.out.println(arr[n]);           
   }     
}

这是我的方法测试员

public class TestFibonacci
{
   public static void main(String[] args)
   {
      Fibonacci f1 = new Fibonacci();

      f1.fibonacci(3);
      f1.fibonacci(10);
      f1.fibonacci(20);
      f1.fibonacci(30);
      f1.fibonacci(40);
      f1.fibonacci(50);
      f1.fibonacci(60);
      f1.fibonacci(100);
   }
}

我开始得到负数后,我的当前输出最多可达40,任何提示??

2
55
6765
832040
102334155
-298632863
1820529360
-980107325

2 个答案:

答案 0 :(得分:0)

当然,您最好使用BigInteger,因为如果没有您integer overflow(link)

public void fibonacci(int n) {
    BigInteger[] arr = new BigInteger[n + 1];

    arr[0] = BigInteger.ZERO;
    arr[1] = BigInteger.ONE;
    arr[2] = BigInteger.ONE;

    for (int i = 3; i <= n; i++) {
        arr[i] = arr[i - 1].add(arr[i - 2]);
    }

    System.out.println(arr[n]);
}

你会得到:

2
55
6765
832040
102334155
12586269025
1548008755920
354224848179261915075

答案 1 :(得分:-1)

只需声明您的数组以存储BigIntegers:

BigInteger[] arr = new BigInteger[n + 1];

使用BigInteger.ONEBigInteger.ZERO初始化您的第一个值:

arr[0] = BigInteger.ZERO;
arr[1] = BigInteger.ONE;

最后只需使用add方法:

arr[i] = arr[i - 1].add(arr[i - 1]);