斐波那契数,在Java中是一行吗?

斐波那契数,在Java中是一行吗?,java,Java,我想知道如何用最简单的方法,用一条直线来求第n个斐波那契数。这是我的代码,但我想以更好的方式学习 类FibonacciExample1{ 公共静态void main(字符串[]args){ int n1=0,n2=1,n3,i,计数=10; System.out.print(n1+“”+n2);//打印0和1 对于(i=2;i 新的int[]{t[1],t[0]+t[1]}。通过运行此代码,您将得到系列(0,1)、(1,1)、(1,2)、(2,3)、(3、, 5), (5, 8), (8, 13

我想知道如何用最简单的方法,用一条直线来求第n个斐波那契数。这是我的代码,但我想以更好的方式学习

类FibonacciExample1{
公共静态void main(字符串[]args){
int n1=0,n2=1,n3,i,计数=10;
System.out.print(n1+“”+n2);//打印0和1
对于(i=2;i
使用流api,这非常简单

斐波那契数列:0,1,1,2,3,5,8,13,21,34,55。。。。前两个数字 序列的值是0和1,后面的每个数是前两个数的和。 斐波那契元组序列相似;你有一个数字序列和它的后继序列 系列:(0,1)、(1,1)、(1,2)、(2,3)、(3,5)、(5,8)、(8,13)、(13,21)

iterate需要lambda来指定后续元素。就 元组(3,5)的后继者是(5,3+5)=(5,8)。下一个是(8,5+8)。你能看到图案吗? 给定一个元组,后继元组是(t[1],t[0]+t[1])。这是以下lambda指定的内容:t-> 新的int[]{t[1],t[0]+t[1]}。通过运行此代码,您将得到系列(0,1)、(1,1)、(1,2)、(2,3)、(3、, 5), (5, 8), (8, 13), (13, 21).... 请注意,如果您只想打印正常的斐波那契级数, 可以使用映射仅提取每个元组的第一个元素:

Stream.iterate(新长[]{0,1},t->新长[]{t[1],t[0]+t[1]})
.限额(10)
.map(t->t[0])
.forEach(System.out::println);
这是流api:

这是一个递归的“一行程序”(函数体只有一行使用嵌套三元):

示例驱动程序:

public class Fibonacci
{
    public static void main(String[] args)
    {
        for(int i = 1; i <= 10; i++)
        {
            System.out.println("Fibonacci(" + i + ") = " + Fibonacci(i));
        }
    }

    public static long Fibonacci(int termNumber)
    {
        return (termNumber == 1) ? 0 : (termNumber == 2) ? 1 : Fibonacci(termNumber - 1) + Fibonacci(termNumber -2);
    }

}
公共类Fibonacci
{
公共静态void main(字符串[]args)
{

对于(int i=1;i你真的很快:)@michalk谢谢:)我想知道更好的答案如果limit大于
47
则会发生溢出。@EdgarAsatryan是的,因为Fibonacci的第48个数字大于
整数。MAX_VALUE
(2147483647),因此整数的位被“溢出”。将
int
更改为
long
,它将用于限制>47@MelihAlt没错。在答案中,将
int
改为
long
甚至
biginger
都是合理的。WDYT?“最Java的方式”:通常的Java方式不会试图在一行中实现它。
public class Fibonacci
{
    public static void main(String[] args)
    {
        for(int i = 1; i <= 10; i++)
        {
            System.out.println("Fibonacci(" + i + ") = " + Fibonacci(i));
        }
    }

    public static long Fibonacci(int termNumber)
    {
        return (termNumber == 1) ? 0 : (termNumber == 2) ? 1 : Fibonacci(termNumber - 1) + Fibonacci(termNumber -2);
    }

}