斐波那契数列:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
package com.algorithm.tiger.recursion;

/**
* 递归和非递归方法实现斐波那契数列
* <p>
* 斐波那契数列:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
*
* @description: 斐波那契数列
* @author: tiger
* @create: 2020-07-18 11:26
*/
public class Fibonacci {
public static void main(String[] args) {

for (int i = 1; i < 13; i++) {
// System.out.println(fiboRecursive(i));
// System.out.println(fiboAssignment(i));
System.out.println(fiboArray(i));
}

}

/**
* 递归的思想:先递进,后回归(碰到终结条件即开始回归)
*
* @param n
* @return
* @throws Exception
*/
public static int fiboRecursive(int n) {
if (n <= 2) return 1;
return fiboRecursive(n - 1) + fiboRecursive(n - 2);
}

/**
* 赋值法
* 对公式进行演算
*
* @param n
* @return
* @throws Exception
*/
public static int fiboAssignment(int n) {
if (n <= 2) return 1;
int f0 = 1;
int f1 = 1;
int i = 2;
int fn = 0;
while (i <= n) {
fn = f0 + f1;
f0 = f1;
f1 = fn;
i++;
}
return fn;
}

/**
* 数组记录法,记录计算过程值
*
* @param n
* @return
*/
public static int fiboArray(int n) {
if (n <= 2) return 1;
int arr[] = new int[n + 1];
//F(1)=1
arr[0] = 1;
//F(2)=1,
arr[1] = 1;
//F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
for (int i = 2; i <= n; i++) {
arr[i] = arr[i - 1] + arr[i - 2];
}
return arr[n];
}

}