根据用户输入的号码打印斐波纳契

时间:2014-11-14 19:39:29

标签: java

我正在尝试将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;
    }
}

4 个答案:

答案 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中并使用printfFormat 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个数字。