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.
广告