aitken_s_array.sf 794 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #!/usr/bin/ruby
  2. # Fast algorithm for computing Aitken's array.
  3. # See also:
  4. # https://oeis.org/A011971 -- Aitken's array
  5. # https://en.wikipedia.org/wiki/Bell_number
  6. func aitken_array (n) {
  7. var A = [1]
  8. [[1]] + (n-1).of {
  9. A = [A[-1], A...].accumulate
  10. }
  11. }
  12. func aitken_array_recmap (n) {
  13. [[1]].recmap {|A|
  14. A.len >= n ? break : [[A[-1], A...].accumulate]
  15. }
  16. }
  17. aitken_array(10).each { .say }
  18. assert_eq(aitken_array(10), aitken_array_recmap(10))
  19. __END__
  20. [1]
  21. [1, 2]
  22. [2, 3, 5]
  23. [5, 7, 10, 15]
  24. [15, 20, 27, 37, 52]
  25. [52, 67, 87, 114, 151, 203]
  26. [203, 255, 322, 409, 523, 674, 877]
  27. [877, 1080, 1335, 1657, 2066, 2589, 3263, 4140]
  28. [4140, 5017, 6097, 7432, 9089, 11155, 13744, 17007, 21147]
  29. [21147, 25287, 30304, 36401, 43833, 52922, 64077, 77821, 94828, 115975]