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+ 次浏览

开启你的职业生涯

完成课程后获得认证

开始学习
广告