package com.demo.sw.test;
import java.util.Scanner;
/**
* 斐波那契数列 1 1 2 3 5 8 13 21 ...
* @author Mr.J
*
*/
public class Fibonacii {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入数列中你想要的位数:");
int in = input.nextInt();
System.out.print("结果是:");
System.out.println(fibonacii2(in));
System.out.println("斐波那契的数组是:");
long [] arr = fibonaciiArr(in);
prt(arr);
}
/**
* 斐波那契数列第 n 位的值
* @param n
* @return
*/
public static long fibonacii1(int n){
if(n==1 || n==2){
return 1;
}
return fibonacii1(n-1) + fibonacii1(n-2);
}
public static long fibonacii2(int n){
int a=1, b=1;
int temp;
if(n==1 || n==2){
return 1;
}
for (int i = 0; i < n-2; i++) {
temp = a;
a = b;
b = a+temp;
}
return b;
}
/**
* 斐波那契额的数列
* @param n
* @return
*/
public static long[] fibonaciiArr(int n){
long [] rtArr = new long[n];
for (int i = 0; i < rtArr.length; i++) {
rtArr[i] = fibonacii1(i+1);
}
return rtArr;
}
/**
* 打印数组
* @param arr
*/
public static void prt(long[] arr){
String str = "";
for (int i = 0; i < arr.length; i++) {
str += arr[i] + " ";
}
System.out.println(str);
}
}