我编写了许多函数的实现来计算给定位置的斐波那契数。
Fibonacci Class:这个类帮助我测试每个实现而无需重写相同的测试代码。我不想在fibonacci(n - 2).add(fibonacci(n - 1));这里添加“ ”,因为有些实现不使用它(命令式迭代、功能迭代)。
public interface Fibonacci {
BigInteger fibonacci(int n);
}
递归斐波那契类
public class SimpleRecursiveFibonacci implements Fibonacci{
public BigInteger fibonacci(int n) {
if(n < 2) {
return BigInteger.ONE;
}
return fibonacci(n - 2).add(fibonacci(n - 1));
}
}
和 MemorizedRecursiveFibonacci 类
public class MemoizedRecursiveFibonacci implements Fibonacci{
private Map<Integer, BigInteger> cache = new HashMap<>();
public BigInteger fibonacci(int n) {
if(n < 2) {
return BigInteger.ONE;
}
if(!cache.containsKey(n)){
BigInteger currentFibonacci = fibonacci(n - 2).add(fibonacci(n - 1));
cache.put(n, currentFibonacci);
}
return cache.get(n);
}
}
如我所见,MemorizedRecursiveFibonacci 类中有一些重复的代码
if(n < 2) {
return BigInteger.ONE;
和
BigInteger currentFibonacci = fibonacci(n - 2).add(fibonacci(n - 1));
我怎样才能保持干燥?删除重复的代码?
慕后森
白板的微信
相关分类