Я написал много реализаций функции для вычисления числа Фибоначчи в заданной позиции.
Класс Фибоначчи : этот класс помогает мне тестировать каждую реализацию без перезаписи одного и того же тестового кода. Я не хочу добавлять «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 Class
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 Class есть некоторый дублированный код
if(n < 2) {
return BigInteger.ONE;
и
BigInteger currentFibonacci = fibonacci(n - 2).add(fibonacci(n - 1));
Как я могу сохранить его СУХИМ удалить дублированный код?