我正在尝试编写基于Java的Fibonacci序列生成器。我在互联网上看到了很多例子:
public class Fibonacci {
public static void main(String[] args) {
generateFibonacci(20); // generate the first 20 fibonacci numbers
}
public static void generateFibonacci(long limit) {
long first = 0;
long second = 1;
System.out.print(first+", "+second);
for(long i=1;i<limit;i++) {
long next = first + second;
System.out.print(", "+next);
first = second;
second = next;
}
System.out.println();
}
}
它工作正常。问题是我不仅要生成前20个数字,而且还需要指定一个起点。例如:
public List<Long> generateFibonacci(long startFrom, long numberTerms) {
}
这样做的:
generateFibonacci(5, 10);
应输出:
8升
13升
21升
34升
55升
89升
144升
233升
377升
我尝试过以下代码,但似乎没有执行所需的操作:
public class example {
public static void main(String[] args) {
generateFibonacci(10, 5);
}
public static void generateFibonacci(long limit, long startPoint) {
long first = 0;
long second = 1;
long endPoint = startPoint + limit;
System.out.print(first + ", " + second);
for (long i = 1; i < endPoint; i++) {
long next = first + second;
if (i > startPoint) {
System.out.print(", " + next);
}
;
System.out.print(", " + next);
first = second;
second = next;
}
}
}
关于如何以有效的方式实现这一目标的任何想法?
答案 0 :(得分:0)
if (i > startPoint)
此处您不必在i
上添加条件,而是在next
上。
问题是我不仅要生成前20个数字, 但我还需要指定一个起点。
另外,我不确定为什么要打印前两个元素,即0
和1
。我已移除sysout()
以符合您指定的startPoint
条件。
以下是更正后的代码段:
public static void generateFibonacci(long limit, long startPoint) {
long first = 0;
long second = 1;
long endPoint = startPoint + limit;
long next = first + second;
for (long i = 1; i < endPoint; i++) {
if (next > startPoint) {
System.out.print(next + ", ");
}
first = second;
second = next;
next = first + second;
}
}
输出:
8, 13, 21, 34, 55, 89, 144, 233, 377, 610
答案 1 :(得分:0)
第10行总是打印0和1,所以删除它。
第16行有一个分号,第17行打印所有Fibonacci数字,这就是为什么你得到你想要的两个
尝试:
public class example {
public static void main(String[] args) {
generateFibonacci(10, 5);
}
public static void generateFibonacci(long limit, long startPoint) {
long first = 0;
long second = 1;
long endPoint = startPoint + limit;
for (long i = 1; i < endPoint; i++) {
long next = first + second;
if (i == startPoint) {
System.out.print(next);
}
else if ( i > startPoint){
System.out.print(", " + next);
}
first = second;
second = next;
}
}
答案 2 :(得分:0)
如你所说输出必须像这样
8
[13, 21, 34, 55, 89, 144, 233, 377]
并且您想要返回斐波那契数字列表
您可以通过这种方式返回列表!
public static void main(String[] args) {
List<Long> list = generateFibonacci(10, 5);
System.out.println(list.size());
System.out.println(Arrays.toString(list.toArray()));
}
public static List<Long> generateFibonacci(long limit, long startPoint) {
List<Long> list = new ArrayList<>();
long first = 0;
long second = 1;
long endPoint = startPoint + limit - 1;
//System.out.print(first + ", " + second);
if (startPoint==0){
list.add(0);
list.add(1);
}else if (startPoint ==1){
list.add(1);
}
for (long i = 2; i < endPoint; i++) {
long next = first + second;
if (i > startPoint) {
// System.out.println(next);
list.add(next);
}
first = second;
second = next;
}
return list;
}
答案 3 :(得分:0)
由于你必须计算最初的斐波纳契数,所以只需使用标准方法即可:
public static void generateFibonacci(long limit, long startPoint) {
return generateFibonacci(limit).subList(startPoint - 1, limit);
}