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