Left factorials
Built-in:
say 20.of { .left_factorial }Straightforward:
func left_factorial(n) {
^n -> sum { _! }
}Memory efficient with Range.reduce():
func left_factorial(n) {
^n -> reduce({ |a,b| a + b! }, 0)
}A faster approach:
func left_factorial(n) {
static cached = 0
static factorial = 1
static leftfact = 0
if (n < cached) {
cached = 0
factorial = 1
leftfact = 0
}
while (n > cached) {
leftfact += factorial
factorial *= ++cached
}
leftfact
}Completing the task:
Output:
Last updated
Was this helpful?