Javaでワンライナーでフィボナッチ数、?

別のDrovez:

私は1行で最もJavaticな方法でn番目のフィボナッチ数を見つけることができる方法を知っていただきたいと思います。これは私のコードですが、私はより良い方法を学びたいと思っています。

class FibonacciExample1 {
    public static void main(String[] args) {
        int n1 = 0, n2 = 1, n3, i, count = 10;
        System.out.print(n1 + " " + n2);//printing 0 and 1    

        for (i = 2; i < count; ++i)//loop starts from 2 because 0 and 1 are already printed    
        {
            n3 = n1 + n2;
            System.out.print(" " + n3);
            n1 = n2;
            n2 = n3;
        }

    }
}
Melih Altintas:

ストリームAPIで、これは非常に簡単です

フィボナッチ数列:0、1、1、2、3、5、8、13、21、34、55 ....シリーズの最初の2つの数字は0から1であり、後続の各数値は、以前の合計であります二。フィボナッチタプルのシリーズも同様です。、(0,1)、(1,1)、(1,2)、(2,3)、(3,5)、(5,8):あなたが数と直列にその後継の配列を有します(8、13)、(13、21)···

反復は、後継の要素を指定するためのラムダを必要とします。タプル後継(5、3 + 5)である(3,5)=(5,8)の場合。次の(8、5 + 8)です。あなたはパターンを見ることができますか?タプル与えられ、後継者である(T [1]、T [0] + T [1])。これは、どのような次のラムダ指定: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(new long[]{0, 1}, t -> new long[]{t[1], t[0] + t[1]})
    .limit(10)
    .map(t -> t[0])
    .forEach(System.out::println);

これは、ストリームAPIです:https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=196198&siteId=1