fubini_numbers_recursive.pl 932 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # Date: 03 January 2019
  4. # https://github.com/trizen
  5. # A recursive formula for computing the Fubini numbers.
  6. # See also:
  7. # https://oeis.org/A000670
  8. use 5.010;
  9. use strict;
  10. use warnings;
  11. use Memoize qw(memoize);
  12. use Math::AnyNum qw(:overload binomial sum);
  13. memoize('nth_fubini_number');
  14. sub nth_fubini_number {
  15. my ($n) = @_;
  16. return 1 if ($n == 0);
  17. sum(map { nth_fubini_number($_) * binomial($n, $_) } 0 .. $n-1);
  18. }
  19. foreach my $i (0 .. 20) {
  20. say "F($i) = ", nth_fubini_number($i);
  21. }
  22. __END__
  23. F(0) = 1
  24. F(1) = 1
  25. F(2) = 3
  26. F(3) = 13
  27. F(4) = 75
  28. F(5) = 541
  29. F(6) = 4683
  30. F(7) = 47293
  31. F(8) = 545835
  32. F(9) = 7087261
  33. F(10) = 102247563
  34. F(11) = 1622632573
  35. F(12) = 28091567595
  36. F(13) = 526858348381
  37. F(14) = 10641342970443
  38. F(15) = 230283190977853
  39. F(16) = 5315654681981355
  40. F(17) = 130370767029135901
  41. F(18) = 3385534663256845323
  42. F(19) = 92801587319328411133
  43. F(20) = 2677687796244384203115