func left_fact(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 }