【问题标题】:Obtaining Fibonacci Series with BigInteger without using Recursion在不使用递归的情况下使用 BigInteger 获得斐波那契数列
【发布时间】:2018-01-28 22:02:10
【问题描述】:

您好所有初学者程序员,在没有递归的情况下很难计算斐波那契数列。

我的主要问题是使用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]);           
   }     
}

这是我的 man 方法测试器

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

【问题讨论】:

  • 你没有在这里使用 BigInteger,所以?
  • 你在哪里使用BigInteger?

标签: java arrays fibonacci


【解决方案1】:

当然你最好使用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

【讨论】:

  • 感谢 Azro,仍在学习越来越多的 java 知识,您已经明确了我的要求。我是否有必要声明数组中的前三个大整数?我想我也会有。
【解决方案2】:

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

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

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

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

最后只需使用 add 方法:

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

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 2017-05-08
    • 2019-01-21
    • 2011-07-27
    • 2018-03-02
    • 2023-01-18
    • 2014-01-05
    • 1970-01-01
    相关资源
    最近更新 更多