簡體   English   中英

"Java:檢查數字是否屬於斐波那契數列"

[英]Java: check if number belongs to Fibonacci sequence

我應該編寫一個代碼來檢查給定數字是否屬於斐波那契數列。 經過幾個小時的努力,這是我想出的:

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));

    }
}

我一定是做錯了什么,因為它總是返回“假”。 有關如何解決此問題的任何提示?

你繼續循環而fib2 <= n ,所以當你離開循環時,fib2總是> n ,所以它返回false

/**
 * @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));

}

這有效。 我不確定效率..但這是一個萬無一失的程序,

public class isANumberFibonacci {

public static int fibonacci(int seriesLength) {
    if (seriesLength == 1 || seriesLength == 2) {
        return 1;
    } else {
        return fibonacci(seriesLength - 1) + fibonacci(seriesLength - 2);
    }
}

public static void main(String args[]) {
    int number = 4101;
    int i = 1;
    while (i > 0) {
        int fibnumber = fibonacci(i);
        if (fibnumber != number) {
            if (fibnumber > number) {
                System.out.println("Not fib");
                break;
            } else {
                i++;
            }
        } else {
            System.out.println("The number is fibonacci");
            break;
        }
    }
}

}

您還可以使用完全平方來檢查您的數字是否為斐波那契數。 你可以在geeksforgeeks找到代碼和一些解釋。 你還可以看到stackexchange它背后的數學。

我是初學者,但這段代碼運行得很好,沒有任何問題。 檢查測試用例希望它能解決您的查詢。

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));

}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM