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 }