我正在尝试将Fibonacci系列打印到用户键入的任何数字。问题是我的代码最终会打印出这么多数字。如果用户输入100,我希望代码停止在100,但我的代码打印100个数字。另外,我应该有printf和while语句。我甚至不知道如何使用printf。
package l12;
import java.util.Scanner;
public class L12 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
System.out.println("Enter an integer: ");
int n = console.nextInt();
System.out.println("The Fibonacci numbers less than " + n + " are: ");
for(int i=1; i<=n; i++){
System.out.print(fibonacci(i) +" ");
}
}
public static int fibonacci(int n){
if(n == 1 || n == 2){
return 1;
}
int f1=1;
int f2=1;
int fibonacci=1;
for(int i= 3; i<= n; i++){
do { fibonacci = f1 + f2;
f1 = f2;
f2 = fibonacci;
}
while (fibonacci <= n);
}
return fibonacci;
}
}
答案 0 :(得分:3)
一种简单的方法是:
public static void main(String [] args){
Scanner console = new Scanner(System.in);
System.out.println("Enter an integer: ");
int n = console.nextInt();
if(n>1) {
System.out.println("The Fibonacci numbers less than " + n + " are: ");
System.out.print("1, 1, ");
int f2=1;
int fibonacci=1;
for(int i=1; i+f2 < n;){
fibonacci = i + f2;
i = f2;
f2 = fibonacci;
System.out.print(fibonacci+", ");
}
} else {
System.out.println("There are no numbers less than " + n + " in the series");
}
}
答案 1 :(得分:1)
如果我理解了您的问题,那么您可以更改此问题(在i > n
时停止
for(int i=1; i<=n; i++){
System.out.print(fibonacci(i) +" ");
}
这样的内容,在fibonacci(i) > n
的结果停止时,将结果存储在fib
中并使用printf
(Format String
syntax表示d
} 结果格式化为十进制整数)。
int fib;
for (int i = 1; (fib = fibonacci(i)) <= n; i++) { // <-- stop wehn fib >= n
System.out.printf("%d ", fib); // <-- printf.
}
System.out.println(); // <-- Add a new-line.
答案 2 :(得分:1)
我会在Go中给你一个答案,所以如果仔细观察,你会看到以下顺序:
1 1 2 3 5 8 13 21 34 55 89 144 ...
映射Fibonacci序列的公式是:
然后,如果你编码(Go):
package main
import "fmt"
func fibonacci() func() int {
first, second := 0, 1
return func() int {
ret := first
first, second = second, first+second
return ret
}
}
func main() {
f := fibonacci()
for i := 0; i < /* What users enter */; i++ {
fmt.Println(f())
}
}
您将看到用户输入的数字。我希望这种方法能帮助你更好地理解这个问题!
干杯!
答案 3 :(得分:0)
这会打印100个数字,因为无论如何都要循环n次:
for(int i=1; i<=n; i++){
System.out.print(fibonacci(i) +" ");
}
我建议将其更改为do-while循环:
int i = 1;
int fib;
do{
fib = fibonacci(i);
System.out.print(fib + " ");
} while(fib < n);
正如我所暗示的,上面的代码总是循环100次。即使你的斐波那契方法不超过100,你的for循环仍然会打印100个数字。