将斐波那契存储在数组中并打印用户期望值
Storing fibonacci in an array and printing the user desired value
我写了一个打印斐波那契数列的代码,我想把它存储在一个动态数组中。
然后当用户输入一个值来打印数组的特定元素时,它应该显示数组中存储的所需斐波那契数的值。
package fibonacci;
import java.util.Scanner;
public class Fibonacci {
public static void main(String[] args){
int size=new Scanner(System.in).nextInt();
int fibonacci[]=new int[size];
int i=3;
System.out.println("The number");
int number=new Scanner(System.in).nextInt();
for(int i1=1;i1<=number;i1++){
System.out.println(fibonacci(i1)+" ");
}
int j=new Scanner(System.in).nextInt();
System.out.println(fibonacci[i]);
}
public static int fibonacci(int number){
if(number==1||number==2){
return 1;
}
return fibonacci(number-1)+fibonacci(number-2);
}
}
只有大约 94 个斐波那契值适合 long
,因此您可以在启动时创建它们。同样使用循环来创建数字是 O(n)
,但是使用递归等于指数的答案。你很快就会得到比宇宙年龄更长的数字来计算。
您可以利用数组并像这样使用它
fibonacci[i]=fibonacci[i-1]+fibonnaci[i-2] 这将大大改善代码的执行,因为递归函数可能具有很高的复杂性,您不会注意到小值的差异但是像 fibonacci[1000] 这样的大值你会注意到你可以让你的 cpu 和记忆受到影响并让他们屈服的差异所以我会给你 Fibonacci1 这是你的版本和 Fibonacci2 更简单的版本:
斐波那契1
import java.util.Scanner;
public class Fibonacci1 {
public static void main(String[] args) {
System.out
.println("enter the upper bound of the serie(Size of the array of fibonacci serie):");
Scanner scanner = new Scanner(System.in);
int size = scanner.nextInt();
int fibonacci[] = new int[size];
for (int i = 0; i < size; i++) {
fibonacci[i] = fibonacci(i+1);
}
System.out.println("enter a number between 1 and " + size);
int j = scanner.nextInt();
while (j < 0 || j > size) {
if (j < 0) {
System.out.println("j<0");
}
if (j > size) {
System.out.println("j>" + size);
}
System.out.println("please enter a number between 1 and " + size);
}
System.out.println("Fibonacci[" + j + "]=" + fibonacci[j - 1]);
scanner.close();
}
public static int fibonacci(int number) {
if (number == 1 || number == 2) {
return 1;
}
return fibonacci(number - 1) + fibonacci(number - 2);
}
}
斐波那契2:
打包 Whosebug;
import java.util.Scanner;
public class Fibonnaci {
public static void main(String[] args) {
System.out
.println("enter the upper bound of the serie(Size of the array of fibonacci serie):");
Scanner scanner = new Scanner(System.in);
int size = scanner.nextInt();
int fibonacci[] = new int[size];
for (int i = 0; i < size; i++) {
fibonacci[i] = fibonacci(i + 1, fibonacci);
}
System.out.println("enter a number between 1 and " + size);
int j = scanner.nextInt();
while (j < 0 || j > size) {
if (j < 0) {
System.out.println("j<0");
}
if (j > size) {
System.out.println("j>" + size);
}
System.out.println("please enter a number between 1 and " + size);
}
System.out.println("Fibonacci[" + j + "]=" + fibonacci[j - 1]);
scanner.close();
}
/*
* changed the fibonacci function in order to use the already calculated
* fibonacci elements
* fibSerie[n]=fibonnaci[n-1]
* fibSerie[n-1]=fibonnaci[n-2];
* fibSerie[n-2]=fibonnaci[n-3];
* because arrays start from 0 so fibSerie[1]=fibonnaci[0];
*/
public static int fibonacci(int number, int[] fibonacci) {
if (number == 1 || number == 2) {
return 1;
}
return fibonacci[number - 2] + fibonacci[number - 3];
}
}
我写了一个打印斐波那契数列的代码,我想把它存储在一个动态数组中。 然后当用户输入一个值来打印数组的特定元素时,它应该显示数组中存储的所需斐波那契数的值。
package fibonacci;
import java.util.Scanner;
public class Fibonacci {
public static void main(String[] args){
int size=new Scanner(System.in).nextInt();
int fibonacci[]=new int[size];
int i=3;
System.out.println("The number");
int number=new Scanner(System.in).nextInt();
for(int i1=1;i1<=number;i1++){
System.out.println(fibonacci(i1)+" ");
}
int j=new Scanner(System.in).nextInt();
System.out.println(fibonacci[i]);
}
public static int fibonacci(int number){
if(number==1||number==2){
return 1;
}
return fibonacci(number-1)+fibonacci(number-2);
}
}
只有大约 94 个斐波那契值适合 long
,因此您可以在启动时创建它们。同样使用循环来创建数字是 O(n)
,但是使用递归等于指数的答案。你很快就会得到比宇宙年龄更长的数字来计算。
您可以利用数组并像这样使用它
fibonacci[i]=fibonacci[i-1]+fibonnaci[i-2] 这将大大改善代码的执行,因为递归函数可能具有很高的复杂性,您不会注意到小值的差异但是像 fibonacci[1000] 这样的大值你会注意到你可以让你的 cpu 和记忆受到影响并让他们屈服的差异所以我会给你 Fibonacci1 这是你的版本和 Fibonacci2 更简单的版本:
斐波那契1
import java.util.Scanner;
public class Fibonacci1 {
public static void main(String[] args) {
System.out
.println("enter the upper bound of the serie(Size of the array of fibonacci serie):");
Scanner scanner = new Scanner(System.in);
int size = scanner.nextInt();
int fibonacci[] = new int[size];
for (int i = 0; i < size; i++) {
fibonacci[i] = fibonacci(i+1);
}
System.out.println("enter a number between 1 and " + size);
int j = scanner.nextInt();
while (j < 0 || j > size) {
if (j < 0) {
System.out.println("j<0");
}
if (j > size) {
System.out.println("j>" + size);
}
System.out.println("please enter a number between 1 and " + size);
}
System.out.println("Fibonacci[" + j + "]=" + fibonacci[j - 1]);
scanner.close();
}
public static int fibonacci(int number) {
if (number == 1 || number == 2) {
return 1;
}
return fibonacci(number - 1) + fibonacci(number - 2);
}
}
斐波那契2:
打包 Whosebug;
import java.util.Scanner;
public class Fibonnaci {
public static void main(String[] args) {
System.out
.println("enter the upper bound of the serie(Size of the array of fibonacci serie):");
Scanner scanner = new Scanner(System.in);
int size = scanner.nextInt();
int fibonacci[] = new int[size];
for (int i = 0; i < size; i++) {
fibonacci[i] = fibonacci(i + 1, fibonacci);
}
System.out.println("enter a number between 1 and " + size);
int j = scanner.nextInt();
while (j < 0 || j > size) {
if (j < 0) {
System.out.println("j<0");
}
if (j > size) {
System.out.println("j>" + size);
}
System.out.println("please enter a number between 1 and " + size);
}
System.out.println("Fibonacci[" + j + "]=" + fibonacci[j - 1]);
scanner.close();
}
/*
* changed the fibonacci function in order to use the already calculated
* fibonacci elements
* fibSerie[n]=fibonnaci[n-1]
* fibSerie[n-1]=fibonnaci[n-2];
* fibSerie[n-2]=fibonnaci[n-3];
* because arrays start from 0 so fibSerie[1]=fibonnaci[0];
*/
public static int fibonacci(int number, int[] fibonacci) {
if (number == 1 || number == 2) {
return 1;
}
return fibonacci[number - 2] + fibonacci[number - 3];
}
}