2 回答

TA貢獻(xiàn)1802條經(jīng)驗 獲得超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);
}
}
或者,更優(yōu)雅地,使用 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貢獻(xiàn)1883條經(jīng)驗 獲得超3個贊
那么抽象的公共父級呢?像這樣的東西:
public abstract class ParentFibonacci implements Fibonacci {
protected BigInteger getFirstValues(int n) {
if (n < 2) {
return BigInteger.ONE;
}
return BigInteger.ZERO;
}
}
這樣你的斐波那契實現(xiàn)需要實現(xiàn) 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));
}
}
添加回答
舉報