斐波那契数列 0,1,1,2,3,5,8,13,21,34……
f(n)=f(n-1)+f(n-2)
f(0)=0
f(1)=1
1、递归,此种方法简单明了,但会重复计算
public static int recursion(int i) {
if (i == 0 || i == 1) {
return i;
}
return recursion (i - 1) + recursion (i - 2);
}
2、在方法1 的基础上,加入缓存,避免重复计算
static Map<Integer, Integer> map = new HashMap<> ();
public static int recursion1(int i) {
return map.computeIfAbsent (i, key -> {
if (key == 0 || key == 1) {
return key;
}
return recursion1 (key - 1) + recursion1 (key - 2);
});
}
3、使用3个变量,累计
public static int recursion2(int i) {
if (i == 0 || i == 1) {
return i;
}
int sum = 0, data0 = 0, data1 = 1;
for (int j = 2; j <= i; j++) {
sum = data0 + data1;
data0 = data1;
data1 = sum;
}
return sum;
}