Когда функция определена следующим образом
static Function1<BigInteger, BigInteger> fibonacci = Function((BigInteger value) ->
value.equals(BigInteger.ZERO) ? BigInteger.ZERO
: value.equals(BigInteger.ONE) ? BigInteger.ONE
: value.equals(BigInteger.valueOf(2)) ? BigInteger.ONE
: Program.fibonacci.apply(value.subtract(BigInteger.ONE)).add(Program.fibonacci.apply(value.subtract(BigInteger.valueOf(2))))
).memoized();
И позвонил
System.out.println(fibonacci.apply(BigInteger.valueOf(1000)));
Он рассчитывается очень быстро. Однако, если я перемещу memoized()
в функциональную переменную следующим образом
static Function1<BigInteger, BigInteger> fibonacci = Function((BigInteger value) ->
value.equals(BigInteger.ZERO) ? BigInteger.ZERO
: value.equals(BigInteger.ONE) ? BigInteger.ONE
: value.equals(BigInteger.valueOf(2)) ? BigInteger.ONE
: Program.fibonacci.apply(value.subtract(BigInteger.ONE)).add(Program.fibonacci.apply(value.subtract(BigInteger.valueOf(2))))
); // Removed memoized() from here
И позвонил
fibonacci.memoized().apply(BigInteger.valueOf(1000));
Это занимает очень много времени, как если бы memoized()
не применялся.
В чем может быть причина?