我想知道如何用单行的大多数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;
}
}
}
答案 0 :(得分:11)
使用流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(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
答案 1 :(得分:0)
这是一个递归的“单行代码”(函数主体使用嵌套三元数仅一行):
zero(bool): # @zero(bool)
mov eax, edi
shl eax, 3
xor dil, 1
movzx ecx, dil
lea eax, [rax + 8*rcx]
add eax, -8
ret
示例驱动程序:
public static long Fibonacci(int termNumber)
{
return (termNumber == 1) ? 0 : (termNumber == 2) ? 1 : Fibonacci(termNumber - 1) + Fibonacci(termNumber -2);
}
输出: