3

与えられた番号がフィボナッチ数列に属しているかどうかをチェックするコードを書くことになっています。数時間のハードワークの後、これは私が思いついたものです:

public class TP2 {

    /**
     * @param args
     */

    public static boolean ehFibonacci(int n) {
        int fib1 = 0;
        int fib2 = 1;
        do {
            int saveFib1 = fib1;
            fib1 = fib2;
            fib2 = saveFib1 + fib2;
            }
        while (fib2 <= n);

        if (fib2 == n)
            return true;
        else
            return false;

    }
    public static void main(String[] args) {
        int n = 8;
        System.out.println(ehFibonacci(n));

    }
}

常に「false」を返すので、私は何か間違ったことをしているに違いありません。これを修正するためのヒントはありますか?

4

5 に答える 5

8

ながらループを続けるfib2 <= nので、ループから抜けたときは常に fib2 であり> n、 を返しますfalse

于 2012-11-11T23:32:07.260 に答える
1
/**
 * @param args
 */

public static boolean ehFibonacci(int n) {
    int fib1 = 0;
    int fib2 = 1;
    do {
        int saveFib1 = fib1;
        fib1 = fib2;
        fib2 = saveFib1 + fib2;
        }
    while (fib2 < n);

    if (fib2 == n)
        return true;
    else
        return false;

}
public static void main(String[] args) {
    int n = 5;
    System.out.println(ehFibonacci(n));

}
于 2012-11-11T23:33:58.543 に答える
0

私は初心者ですが、このコードは問題なく完全に正常に動作します。テストケースを確認して、クエリが解決されることを願っています。

public static boolean checkMember(int n) {
    int x = 0;
    int y = 1;
    int sum = 0;
    boolean isTrue = true;

    for (int i = 1; i <= n; i++) {
        x = y;
        y = sum;
        sum = x + y;
        if (sum == n) {
            isTrue=true;
            break;
        } else {
            isTrue=false;
        }
    }
    return isTrue;
}

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    System.out.print(checkMember(n));

}
于 2022-01-21T06:29:03.563 に答える
0

完全平方を使用して、数値がフィボナッチかどうかを確認することもできます。コードといくつかの説明はgeeksforgeeksにあります。また、その背後にある数学のstackexchangeも確認できます。

于 2021-11-20T21:30:35.460 に答える