这里的所有初学者程序员都好,很难计算一个没有递归的斐波纳契系列。
我的主要问题是使用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
答案 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.ONE
和BigInteger.ZERO
初始化您的第一个值:
arr[0] = BigInteger.ZERO;
arr[1] = BigInteger.ONE;
最后只需使用add方法:
arr[i] = arr[i - 1].add(arr[i - 1]);