递归中一个最简单的题目,斐波那契数列问题,很多人都知道递归暴力,可是为什么暴力呢,因为他有很多重复计算的过程,比如f(6) = f(5) + f(4),f(5) = f(4) + f(3),其中f(4)就被重复计算了。 我们可以采取缓存的方式来稍微优化一下,也就是第二种写法。
public class Class1 {
public static void main(String[] args) {
int i = process1(40);
System.out.println("i = " + i);
Map<Integer,Integer> map = new HashMap<Integer, Integer>();
int i2 = process1(40, map);
System.out.println("i2 = " + i2);
}
private static int process1(int position){
if(position == 1 || position == 2){
return 1;
}
return process1(position-1)+process1(position-2);
}
private static int process1(int position,Map<Integer,Integer> map){
if(position == 1 || position == 2){
return 1;
}
int result = 0;
if(map.get(position) == null){
result = process1(position-1,map)+process1(position-2,map);
map.put(position,result);
}else{
return map.get(position);
}
return result;
}
}