stern_brocot_sequence.pl 863 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/usr/bin/perl
  2. # Coded by Trizen
  3. # Date: 14 May 2015
  4. # https://github.com/trizen
  5. use 5.010;
  6. use strict;
  7. use warnings;
  8. # Inspired from: https://www.youtube.com/watch?v=DpwUVExX27E
  9. #
  10. ## Create and return the sequence as an array
  11. #
  12. sub stern_brocot {
  13. my ($n) = @_;
  14. my @fib = (1, 1);
  15. foreach my $i (1 .. $n) {
  16. push @fib, $fib[$i] + $fib[$i - 1], $fib[$i];
  17. }
  18. return @fib;
  19. }
  20. say join(" ", stern_brocot(15));
  21. #
  22. ## Print the sequence as it is generated
  23. #
  24. sub stern_brocot_realtime(&$) {
  25. my ($callback, $n) = @_;
  26. my @fib = (1, 1);
  27. foreach my $i (1 .. $n) {
  28. push @fib, $fib[0] + $fib[1], $fib[1];
  29. $callback->($fib[0]);
  30. shift @fib;
  31. }
  32. $callback->($_) for @fib;
  33. }
  34. {
  35. local $| = 1;
  36. my $i = 0;
  37. stern_brocot_realtime {
  38. my ($n) = @_;
  39. print "$n ";
  40. } 15;
  41. }
  42. print "\n";