使用递归实现斐波那契数列
上代码
package com.demo._05递归;
import java.util.Arrays;
/**
* @Desc 递归斐波那契第n项
**/
public class _06Fibonacci {
/**
* 使用Memoization记忆法改进,也称备忘录,减少分支
* 空间换时间
* @return
*/
public static int fibonacci(int n) {
int[] cache = new int[n + 1] ;
Arrays.fill(cache, -1);
cache[0] = 0;
cache[1] = 1;
return f2(n, cache) ;
}
public static int f2(int n, int[] cache) {
if(cache[n] != -1) return cache[n] ;
// 求n大于1的情况
int x = f2(n - 1, cache);
int y = f2(n - 2, cache);
// 存入数组
cache[n] = x + y ;
return cache[n] ;
}
public static int f(int n) {
if(n == 0) return 0;
if(n == 1) return 1;
// 求n大于1的情况
int x = f(n - 1);
int y = f(n - 2);
return x + y ;
}
public static void main(String[] args) {
int f = f(9);
int fibonacci = fibonacci(9);
System.out.println(f);
System.out.println(fibonacci);
}
}