bernoulli_numbers_recurrence.sf 492 B

123456789101112131415161718192021222324
  1. #!/usr/bin/ruby
  2. # A recurrence for computing Bernoulli numbers.
  3. # Formula:
  4. # a(0) = 1
  5. # a(n) = 1 - Sum_{k=0..n-1} binomial(n, k) * a(k) / (n - k + 1)
  6. # Which gives us the nth-Bernoulli number, B_n, as:
  7. # B_n = a(n)
  8. # See also:
  9. # https://en.wikipedia.org/wiki/Bernoulli_number#Recursive_definition
  10. func a((0)) { 1 }
  11. func a(n) is cached {
  12. 1 - sum(0..^n, {|k| binomial(n, k) * a(k) / (n - k + 1) })
  13. }
  14. for n in (0..60 `by` 2) {
  15. printf("B(%2d) = %50s / %s\n", n, a(n).nude)
  16. }