NAME
Math::Recaman - Calculate numbers in Recamán's sequence
SYNOPSIS
use Math::Recaman qw(recaman);
recaman(100); # print the first 100 numbers in Recamán's sequence
recaman(1000, sub { push @nums, shift }); # collect the first 1000 numbers into an array
my @array = recaman(10); # Returns the first 10 Recaman numbers as an array
DESCRIPTION
Recamán's sequence is a well known sequence defined by a recurrence relation.
It is named after its inventor, Colombian mathematician Bernado Recamán Santos by Neil Sloane, creator of the On-Line Encyclopedia of Integer Sequences (OEIS). The OEIS entry for this sequence is A005132.
The sequence is defined as
aₙ = 0 if n = 0
aₙ = aₙ₋₁ - n if aₙ₋₁ - n > 0 and is not already in the sequence
aₙ = aₙ₋₁ + n otherwise
It is known to produce quite aethetically pleasing outputs if plotted as an image or as music.
See more:
METHODS
recaman <target> [callback]
Takes a target number to calculate to. If nothing is given the method returns immediately.
By default it prints each number out on a new line.
You can optionally pass in a anonymous subroutine which will be called for each new number in the sequence with the arguments number
, count
and max seen so far
.
If you do not pass an anonymous subroutine and if you call this subroutine expecting an array in return then nothing will be printed.
recaman_a008336 <target> [callback]
There is another sequence invented by Recamán, less known, defined as:
a₁ = 1
aₙ₊₁ = aₙ/n if n divides aₙ
aₙ₊₁ = naₙ otherwise
Takes a target number to calculate to. If nothing is given the method returns immediately.
By default it prints each number out on a new line.
You can optionally pass in a anonymous subroutine which will be called for each new number in the sequence with the arguments number
, count
and max seen so far
.
If you do not pass an anonymous subroutine and if you call this subroutine expecting an array in return then nothing will be printed.
Using Set::IntSpan
If the module Set::IntSpan is installed then that will be used for keeping track of the sequence.
This should make it more efficient for very long sequences.
You can check to see if the module is using Set::IntSpan by checking the variable $Math::Recaman::USING_INTSPAN
.
You can disable using the module even if it's installed by setting the variable $Math::Recaman::USING_INTSPAN
to 0
before calling the recaman
function.
AUTHOR
Simon Wistow, <simon at thegestalt.org>
BUGS
Please report any bugs or feature requests to bug-math-recaman at rt.cpan.org
, or through the web interface at https://rt.cpan.org/NoAuth/ReportBug.html?Queue=Math-Recaman. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
You can also open issues on GitHub at https://github.com/simonwistow/Math-Recaman.
VERSION
Version 0.01
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Math::Recaman
You can also look for information at:
RT: CPAN's request tracker (report bugs here)
CPAN Ratings
Search CPAN
GitHub
LICENSE AND COPYRIGHT
This software is Copyright (c) 2024 by Simon Wistow.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)