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.

更新於:2024年8月1日

2K+ 次瀏覽

開啟你的職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.