diff --git a/src/main/java/ru/ilug/c7_factorial_calculator/FactorialCalculatorImpl.java b/src/main/java/ru/ilug/c7_factorial_calculator/FactorialCalculatorImpl.java new file mode 100644 index 0000000..3cf7184 --- /dev/null +++ b/src/main/java/ru/ilug/c7_factorial_calculator/FactorialCalculatorImpl.java @@ -0,0 +1,18 @@ +package ru.ilug.c7_factorial_calculator; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class FactorialCalculatorImpl implements FactorialCalculator { + + private final Map cache = new ConcurrentHashMap<>(); + + @Override + public int calculate(int num) { + if (num <= 1) { + return 1; + } + return cache.computeIfAbsent(num, n -> calculate(n - 1) * n); + } + +} diff --git a/src/main/java/ru/ilug/c7_factorial_calculator/MainTest.java b/src/main/java/ru/ilug/c7_factorial_calculator/MainTest.java index 0c1ea7b..e56709b 100644 --- a/src/main/java/ru/ilug/c7_factorial_calculator/MainTest.java +++ b/src/main/java/ru/ilug/c7_factorial_calculator/MainTest.java @@ -6,7 +6,7 @@ import lombok.extern.slf4j.Slf4j; public class MainTest { public static void main(String[] args) { - FactorialCalculator factorialCalculator = null; + FactorialCalculator factorialCalculator = new FactorialCalculatorImpl(); log.info("Factorial 3 = {}", factorialCalculator.calculate(3)); log.info("Factorial 4 = {}", factorialCalculator.calculate(4));