2 回答
TA贡献1871条经验 获得超8个赞
使用流 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 -> new 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
TA贡献1786条经验 获得超11个赞
这是一个递归的“单行代码”(函数体只有一行使用嵌套三元):
public static long Fibonacci(int termNumber)
{
return (termNumber == 1) ? 0 : (termNumber == 2) ? 1 : Fibonacci(termNumber - 1) + Fibonacci(termNumber -2);
}
示例驱动程序:
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);
}
}
输出:
添加回答
举报