斐波那契数列两种实现方式
1 1 2 3 5 8 13 21 34 55 …
原始
public class FibonacciSequence {
public int f(int num){
if(num<=1){
return num;
}
return f(num-1)+f(num-2);
}
public static void main(String[] args) {
int num =10;
FibonacciSequence fs = new FibonacciSequence();
int f = fs.f(num);
System.out.println(f);
}
}
记忆化定义
原始算法,比如计算f(4)=f(3)+f(2)=(f(2)+f(1))+f(2),可以看出f(2)被重复计算了2次,因此,为了消除上述情况中的重复计算,其中一个想法是将中间结果存储在缓存中,以便我们以后可以重用它们,而不需要重新计算。代码改进如下:
public class FibonacciSequence {
HashMap<Integer, Integer> map = new HashMap<>();
public int f(int num){
if(map.containsKey(num)){
return map.get(num);
}
if(num<=1){
return num;
}
int result = f(num-1)+f(num-2);
map.put(num,result);
return result;
}
public static void main(String[] args) {
int num =10;
FibonacciSequence fs = new FibonacciSequence();
int f = fs.f(num);
System.out.println(f);
}
}