# Cached factorial in Raku

Factorial, being a classical task for practising algorithms, is a great example to demonstrate the features of Raku. Let us update the code so that it caches the already calculated values.

Factorial, being a classical task for drilling algorithms, is a great example to demonstrate the features of Raku. You can find a number of different implementations in the corresponding section of my book Using Raku.

Let us update the code so that it caches the already calculated values.

I am using multi-functions to distinguish between zero and non-zero arguments:

```multi sub postfix:<!>(0) { 1 }

multi sub postfix:<!>(\$n) {
\$n * (\$n - 1)!
}```

Let us add a state variable to the second variant of the function so that it remembers the values and returns it immediately if it is already known:

```multi sub postfix:<!>(0) { 1 }

multi sub postfix:<!>(\$n) {
state %factorial;

%factorial{\$n} //= \$n * (\$n - 1)!
}```

Notice how you can assign the new value if needed and return the result in a single line without any `if` constructs. Also don’t forget the the last computed value is returned by the function.

As a homework, add some printing instructions to see how the function fills up the cache and test it on a few randomly ordered numbers:

```say 5!;
say 7!;
say 4!;```

Also take a look at the Memoize module.

## 3 thoughts on “Cached factorial in Raku”

1. Sol says:

Huh. “is cached” is no longer part of the core language?