JAVA:有没有一种打印斐波那契数的较短方法?
基本上,我想知道是否有一种打印0-100之间斐波那契数的较短方法 我所做的可能非常基本,但代码如下:JAVA:有没有一种打印斐波那契数的较短方法?,java,arrays,numbers,sequence,fibonacci,Java,Arrays,Numbers,Sequence,Fibonacci,基本上,我想知道是否有一种打印0-100之间斐波那契数的较短方法 我所做的可能非常基本,但代码如下: public static void main(String[] args) { int number[] = new int[100]; number[0] = 0; number[1] = 1; int sum1 = number[0] + number[0]; int sum2 = sum1 + number[1]; int sum3
public static void main(String[] args) {
int number[] = new int[100];
number[0] = 0;
number[1] = 1;
int sum1 = number[0] + number[0];
int sum2 = sum1 + number[1];
int sum3 = sum1 + sum2;
int sum4 = sum2 + sum3;
int sum5 = sum3 + sum4;
int sum6 = sum4 + sum5;
System.out.println(sum1);
System.out.println(sum2);
System.out.println(sum3);
System.out.println(sum4);
System.out.println(sum5);
System.out.println(sum6);
}
我会一直干到100岁。但我相信有一种更快的方法。如何实现?实现这一点的标准方法是递归: 看一下这个简单的代码段,它在位置a返回斐波那契数:
public static long fib(int a){
if (a==1||a==2) return 1;
else return fib(a-1)+fib(a-2);
}
谷歌搜索ftw!。。。甚至连一分钟的搜索都没有
int[] fibonacci = new int[25+1];
fibonacci[1] = 1;
fibonacci[2] = 1;
for ( int i = 3; i < fibonacci.length; i++ )
{
fibonacci[i] = fibonacci[i-2] + fibonacci[i-1];
}
你可以使用循环。本例使用BigInteger,因为该数字很快就会变得太大 几秒钟后终于打印出来了 420269270299515438。。。很多很多数字被删除了。。。9669707537501
注意:您不需要记住前面的所有值,只需记住最后两个值。使用n=11打印编号<100
public int getFib(int n){
if(n==0) return 0;
else if(n==1) return 1;
else{
int temp=getFib(n-1)+getFib(n-2);
return temp;
}
}
以防你不想使用递归的方式。。 这里是迭代的
public class Fib2 {
public static int fib(int n, int a, int b)
{
if (n==0)
{
System.out.print("1x +");
return a;
}
else
{
System.out.print("2x +");
return fib(n-1,b,a+b);
}
}
public static void main(String arg[])
{
System.out.println(fib(0,1,1));
}
}
100不是斐波那契数,但是如果我们包括144,那么这是一个很好的简洁的例子:
class F
{
public static void main( final String[] a )
{
int a = 1, b = 1;
for ( ; b < 145; a = b + (b = a) )
System.out.println( b );
}
}
如果您必须在没有阵列的情况下执行此操作,那么下面是一种方法。把20换成100。这是我做作业的方式,对于那些仍在学习的人来说很容易理解
public static void main(String[] args)
{
int number1 = 1;
int number2 = 1;
int count;
int fib;
System.out.print(number1 + " " + number2 + " ");
for(count = 3; count <= 20; count++)
{
fib = number1 + number2;
number1 = number2;
number2 = fib;
System.out.print(fib + " ");
}
}
你听说过谷歌吗?定义更短的:代码长度还是运行时?谷歌发现,例如:你需要学习的是你的编码方式。似乎更快捷的方法是用笔和纸来计算。在Java中,调用的次数等于答案,使这变得简单,但是解决方法非常慢。你能用这种方法告诉我第10000000个斐波那契数吗?使用记忆法可以获得一个有效的解决方法。@extremecorders-记忆法只有在重复调用同一个操作时才有用。在这种情况下,它将把执行时间减少一半,而代价是内存不足。除了用于处理递归的堆栈上框架之外,因为这不是编写的尾部调用优化。@Peter-我相信您使用的是您发布的解决方案,而不是递归解决方案。我希望搜索很快,评论中至少已经发布了4个实现。有一些明确的方法可以做到这一点,但它非常复杂,因此递归实现更容易。您可能应该了解它是什么,以及它与其他实现的区别。
public static void main(String[] args)
{
int number1 = 1;
int number2 = 1;
int count;
int fib;
System.out.print(number1 + " " + number2 + " ");
for(count = 3; count <= 20; count++)
{
fib = number1 + number2;
number1 = number2;
number2 = fib;
System.out.print(fib + " ");
}
}