left_factorials_1.sf 506 B

12345678910111213141516171819202122232425262728293031
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Left_factorials#Sidef
  4. #
  5. func left_fact(n) {
  6. static cached = 0;
  7. static factorial = 1;
  8. static leftfact = 0;
  9. if (n < cached) {
  10. cached = 0;
  11. factorial = 1;
  12. leftfact = 0;
  13. }
  14. while (n > cached) {
  15. leftfact += factorial;
  16. factorial *= ++cached;
  17. }
  18. leftfact;
  19. }
  20. [range(0, 10), range(20, 50).by(10)].each { |r|
  21. r.each { |i|
  22. printf("!%d = %s\n", i, left_fact(i));
  23. }
  24. }