package jianzhiOffer;
/**
 * 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39
 * @author user
 *思路:既然n的大小有限制,就用递归来解决
 *		0 1 1 2 3 5 8...
 *非递归方式也可以实现,采用数组存储的方式
 */
public class ch07 {

	//递归实现
	public static int Fibonacci(int n) {
		if(n < 0) {
			return -1;
		} else if(n == 0) {
			return 0;
		} else if(n == 1) {
			return 1;
		} else {
			return Fibonacci(n - 1) + Fibonacci(n - 2);
		}
	}
	//非递归实现
	public static int Fibonacci2(int n) {
		if(n < 0) {
			return -1;
		} else if(n == 0) {
			return 0;
		} else if(n <= 2) {
			return 1;
		} else {
			int[] arr = new int[n];
			arr[0] = 1;
			arr[1] = 1;
			for (int i = 3; i <= n; i++) {
				arr[i - 1] = arr[i - 2] + arr[i - 3];
			}
			return arr[n - 1];
		}
	}
	public static void main(String[] args) {
//		int result = Fibonacci(5);
		int result = Fibonacci2(3);
		System.out.println(result);
	}
}