package pack;
import java.util.LinkedHashMap;
import java.util.Map;
public class Fibbo {
public static Map<Integer,Integer> maps = new LinkedHashMap<>();
static int count = 0;
public static int fibbo(int n) {
count++;
if (n == 1 || n == 2) {
return 1;
}
int fi1;
if (maps.get(n - 1) != null) {
fi1 = maps.get(n - 1);
} else {
fi1 = fibbo(n - 1);
maps.put(n - 1, fi1);
}
int fi2;
if (maps.get(n - 2) != null) {
fi2 = maps.get(n - 2);
} else {
fi2 = fibbo(n - 2);
maps.put(n - 2, fi2);
}
return fi1 + fi2;
}
public static void main(String[] args) {
//1 1 2 3 5 f5 = 12
System.out.println(fibbo(4) + ":" + count);
}
}
思想:将每次函数调用的结果暂存起来,进入递归之前先检查,如果有计算相应结果就不递归,
否则再递归。
function fibbo(n) {
if (o[n]) {
return o[n];
} else {
if (n == 1 || n == 2) {
return 1;
}
return fibbo(n - 1) + fibbo(n - 2);
}
}
var o = {
};
console.log(fibbo(3, o));