bernoulli_numbers_new_recurrence.sf 564 B

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