我正在学习java并正在练习数组。我决定生成一个Fibonacci系列作为实验,并且不禁认为可能有一种更简单的方法来生成该系列(使用数组和循环)。
有什么想法吗?
//Generate a Fibonacci series
public class Array {
public static void main(String[] args) {
// An array to store the values
int[] intArray = new int[20];
// starting values for the sequence
intArray[0] = 0;
intArray[1] = 1;
//display the first values
System.out.println("array["+(0)+"] = "+intArray[0]);
System.out.println("array["+(1)+"] = "+intArray[1]);
//generate the fibonnacci progression with a loop
for (int count=2;count<intArray.length;count++){
intArray[count] = intArray[(count-1)]+intArray[(count-2)];
System.out.println("array["+(count)+"] = "+intArray[count]);
}
}
答案 0 :(得分:1)
你应该寻找一个递归的答案,这个网站上有很多。例如。 fibonacci series - recursive summation
答案 1 :(得分:1)
这是一个无数组解决方案 - 只使用了4 int
。
public class Fibonacci
{
public static void main(String[] args)
{
int first = 0;
int second = 1;
int sum;
for (int i = 0; i < 20; i++)
{
sum = first + second;
System.out.println("iteration " + i + ": " + sum);
first = second;
second = sum;
}
}
}
输出:
iteration 0: 1
iteration 1: 2
iteration 2: 3
iteration 3: 5
iteration 4: 8
iteration 5: 13
iteration 6: 21
iteration 7: 34
iteration 8: 55
iteration 9: 89
iteration 10: 144
iteration 11: 233
iteration 12: 377
iteration 13: 610
iteration 14: 987
iteration 15: 1597
iteration 16: 2584
iteration 17: 4181
iteration 18: 6765
iteration 19: 10946
答案 2 :(得分:0)
如果您想将所有值存储在数组中,我会说您完成它的方式是解决此问题的最优雅和有效的方法。但是,存储值不是必需的。
从美学方面来说,计数变量周围的圆括号和数字0和1都不是必需的,并且使代码非常混乱。
答案 3 :(得分:0)
这是我能做到的最短时间:
public static void main(String[] args) {
int a = 0, b = 1;
long length = 20;
System.out.println(a);
System.out.println(b);
while (--length >= 0)
System.out.println((a = (b = a + b) - a) * 0 + b);
}
给出:
0 1 1 2 3 5 8 13 ...
答案 4 :(得分:0)
曾经测试过像这样的解决方案吗?它使用Moivre-Binet公式。对于长类型,我得到n> 1的精度误差。 71。
public static void main(String[] args) {
for (int i = 0; i < 20; i++) {
System.out.println(getFibonacci(i));
}
}
private static int getFibonacci(int n) {
return (int) ((1D / Math.sqrt(5D)) * ((Math.pow(((1D + Math.sqrt(5D)) / 2D), n)) - Math.pow(((1D - Math.sqrt(5D)) / 2D), n)));
}
n 越高或者内存或递归算法的内存越大。以下递归示例适用于 n = 14832 。可能正在等待我当前的JVM设置。
static final Map<Integer,BigInteger> FIBONACCI_RESULTS = new HashMap<>();
private static BigInteger getFibonacciRecursive(final int n) {
return ((n == 1) || (n == 2)) ? BigInteger.ONE : fetchResult(n);
}
private static BigInteger fetchResult(final int n) {
BigInteger result;
System.out.println("n := "+n);
if (FIBONACCI_RESULTS.containsKey(n)) {
result = FIBONACCI_RESULTS.get(n);
} else {
result = getFibonacciRecursive(n - 1).add(getFibonacciRecursive(n - 2));
FIBONACCI_RESULTS.put(n, result);
}
return result;
}
答案 5 :(得分:0)
我可以制作Fibonacci系列的最优雅,结构良好的程序是:
import java.util.Scanner;
public class fibon{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("How many times shall we generate the fibonacci series?");
int max = scan.nextInt();
scan.close();
fibgen(max);
}
public static void fibgen(int max) {
int f = 0, s = 1;
for(int i = 0; i <= max; i++) {
f += s;
s = f - s;
System.out.println(s + " ");
}
}
}