Java程式:檢查給定數字是否為斐波那契數?
對於給定的輸入數字,編寫一個Java程式來檢查它是否是斐波那契數。任何屬於斐波那契數列的數字都稱為斐波那契數。斐波那契數列是由其前兩個整數之和形成的一系列數字。該數列的前兩項是0和1,後面的項依次為1、2、3、5、8等等。這個數列是以一位著名的義大利數學家萊昂納多·斐波那契的名字命名的。
示例場景1
Input: num1 = 8; Output: 8 is a Fibonacci number
8屬於斐波那契數列
示例場景2
Input: num2 = 9; Output: 9 is not a Fibonacci number
如何在Java中檢查斐波那契數?
使用以下方法來檢查給定數字是否為斐波那契數:
- 迭代方法
- 數學方法
- 遞迴方法
使用迭代方法
在迭代方法中,迭代地查詢斐波那契數,直到迴圈達到或超過給定數字。但是,由於其線性時間複雜度,對於大數來說它效率不高。
程式
在這個Java程式中,我們使用迭代方法來檢查給定的輸入是否為斐波那契數。
public class CheckerClass {
// function to check fibonacci
public static boolean fibonacci_num_check(int number) {
if (number == 0 || number == 1)
return true;
int prev = 0, next = 1, sum;
while (next < number) {
sum = prev + next;
prev = next;
next = sum;
}
return number == next;
}
public static void main(String[] args) {
// given input number
int inputNum = 8;
// checking if given number is fibonacci
boolean isFibonacciNumber = fibonacci_num_check(inputNum);
if (isFibonacciNumber) {
System.out.println(inputNum + " is a Fibonacci number.");
} else {
System.out.println(inputNum + " is not a Fibonacci number.");
}
}
}
執行後,此程式碼將顯示以下結果:
8 is a Fibonacci number.
使用數學方法
在這種方法中,計算完全平方來檢查給定數字是否為斐波那契數。當且僅當(5乘以n^2 + 4)或(5乘以n^2 - 4)之一或兩者都是完全平方時,給定數字才是斐波那契數。
程式
以下是使用上述數學方法檢查給定數字是否為斐波那契數的Java程式。
public class Demo{
static boolean perfect_square_check(int val){
int s = (int) Math.sqrt(val);
return (s*s == val);
}
static boolean fibonacci_num_check(int n){
return perfect_square_check(5*n*n + 4) || perfect_square_check(5*n*n - 4);
}
public static void main(String[] args){
for (int i = 6; i <= 17; i++)
System.out.println(fibonacci_num_check(i) ? i + " is a Fibonacci number" :
i + " is a not Fibonacci number");
}
}
執行程式碼後,將顯示以下輸出:
6 is a not Fibonacci number 7 is a not Fibonacci number 8 is a Fibonacci number 9 is a not Fibonacci number 10 is a not Fibonacci number 11 is a not Fibonacci number 12 is a not Fibonacci number 13 is a Fibonacci number 14 is a not Fibonacci number 15 is a not Fibonacci number 16 is a not Fibonacci number 17 is a not Fibonacci number
使用遞迴方法
要遞迴地檢查斐波那契數,請遵循以下步驟:
- 步驟1:遞迴計算第n個斐波那契數。
- 步驟2:將計算出的斐波那契數與給定的輸入進行比較。
- 步驟3:如果兩個數字相等,則返回TRUE,否則返回FALSE。
程式
下面的Java程式演示瞭如何使用遞迴方法檢查斐波那契數。
public class CheckerClass {
// calculate n-th Fibonacci number recursively
public static int fibonacci_num_check(int n) {
if (n <= 1) return n;
return fibonacci_num_check(n-1) + fibonacci_num_check(n-2);
}
// check Fibonacci number
public static boolean checkFibonacci(int number) {
int fib = 0;
int i = 0;
while ((fib = fibonacci_num_check(i)) < number) {
i++;
}
return number == fib;
}
public static void main(String[] args) {
// given input number
int inputNum = 21;
// checking if given number is fibonacci
boolean isFibonacciNumber = checkFibonacci(inputNum);
if (isFibonacciNumber) {
System.out.println(inputNum + " is a Fibonacci number.");
} else {
System.out.println(inputNum + " is not a Fibonacci number.");
}
}
}
執行程式碼後,將顯示以下輸出:
21 is a Fibonacci number.
廣告
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP