2 回答

TA贡献1802条经验 获得超5个赞
该MemorizedRecursiveFibonacci可以委托给一个RecursiveFibonacci实例:
public class MemoizedRecursiveFibonacci implements Fibonacci {
SimpleRecursiveFibonacci simple = new SimpleRecursiveFibonacci();
private Map<Integer, BigInteger> cache = new HashMap<>();
public BigInteger fibonacci(int n) {
if(!cache.containsKey(n)) {
BigInteger currentFibonacci = simple.fibonacci(n);
cache.put(n, currentFibonacci);
}
return cache.get(n);
}
}
或者,更优雅地,使用 Java 8 Map#computeIfAbsent:
public class MemoizedRecursiveFibonacci implements Fibonacci {
SimpleRecursiveFibonacci simple = new SimpleRecursiveFibonacci();
private Map<Integer, BigInteger> cache = new HashMap<>();
public BigInteger fibonacci(int n) {
return cache.computeIfAbsent(n, k -> simple.fibonacci(k));
}

TA贡献1883条经验 获得超3个赞
那么抽象的公共父级呢?像这样的东西:
public abstract class ParentFibonacci implements Fibonacci {
protected BigInteger getFirstValues(int n) {
if (n < 2) {
return BigInteger.ONE;
}
return BigInteger.ZERO;
}
}
这样你的斐波那契实现需要实现 Fibonacci.fibonacci(int n) 并且可以使用父方法。
public class SimpleRecursiveFibonacci extends ParentFibonacci {
public BigInteger fibonacci(int n) {
if (n < 2) {
return getFirstValues();
}
return fibonacci(n - 2).add(fibonacci(n - 1));
}
}
添加回答
举报