package zll.material.fibonacci_sequence;
import java.util.Arrays;
import java.util.Scanner;
import org.junit.Test;
public class FibonacciSequence {
/**
* 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
*/
@SuppressWarnings("resource")
@Test
public void test01(){
while(true){
System.out.println("请输入你想知道的斐波那契数列的位置:");
Scanner scan = new Scanner(System.in);
int nextInt = scan.nextInt();
int fib = getFib1(nextInt);//基于递归实现
System.out.println("斐波那契数列第"+nextInt+"个位置的数为:"+fib);
}
}
/**
* 斐波那契数列的第n个数是多少,n从1开始
* 实现方式,基于递归实现
* @param n
* @return
*/
public int getFib1(int n){
if(n<=0){
return -1;
}else if (n==1) {
return 0;
}else if (n==2||n==3) {
return 1;
}else {
return getFib1(n-1)+getFib1(n-2);
}
}
}
package zll.material.fibonacci_sequence;
import java.util.Arrays;
import java.util.Scanner;
import org.junit.Test;
public class FibonacciSequence {
/**
* 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
*/
@SuppressWarnings("resource")
@Test
public void test01(){
while(true){
System.out.println("请输入你想知道的斐波那契数列的位置:");
Scanner scan = new Scanner(System.in);
int nextInt = scan.nextInt();
int fib = getFib3(nextInt);//基于数组
System.out.println("斐波那契数列第"+nextInt+"个位置的数为:"+fib);
}
}
/**
* 斐波那契数列的第n个数是多少,n从1开始
* 实现方式,基于数组
* @param n
* @return
*/
public int getFib3(int n){
n=n-1;
if(n<0){
return -1;
}else if(n==0){
return 0;
}else if(n==1||n==2){
return 1;
}else {
int[] fib = new int[n+1];
fib[0]=0;
fib[1]=fib[2]=1;
for (int i = 3; i <= n; i++) {
fib[i]=fib[i-1]+fib[i-2];
}
System.out.println(Arrays.toString(fib));
return fib[n];
}
}
}
package zll.material.fibonacci_sequence;
import java.util.Arrays;
import java.util.Scanner;
import org.junit.Test;
public class FibonacciSequence {
/**
* 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
*/
@SuppressWarnings("resource")
@Test
public void test01(){
while(true){
System.out.println("请输入你想知道的斐波那契数列的位置:");
Scanner scan = new Scanner(System.in);
int nextInt = scan.nextInt();
int fib = getFib2(nextInt);//基于变量
System.out.println("斐波那契数列第"+nextInt+"个位置的数为:"+fib);
}
}
/**
* 斐波那契数列的第n个数是多少,n从1开始
* 实现方式,基于变量
* @param n
* @return
*/
public int getFib2(int n){
if(n<=0){
return -1;
}else if(n==1){
return 0;
}else if(n==2||n==3){
return 1;
}else {
int c=0,a=1,b=1;
for (int i = 4; i <= n; i++) {
c=a+b;
a=b;
b=c;
}
return c;
}
}
}