Add all the A tasks
This commit is contained in:
parent
2dd7375f96
commit
051504d65b
1608 changed files with 18584 additions and 0 deletions
14
Task/Anonymous-recursion/Perl/anonymous-recursion-1.pl
Normal file
14
Task/Anonymous-recursion/Perl/anonymous-recursion-1.pl
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
sub recur (&@) {
|
||||
my $f = shift;
|
||||
local *recurse = $f;
|
||||
$f->(@_);
|
||||
}
|
||||
|
||||
sub fibo {
|
||||
my $n = shift;
|
||||
$n < 0 and die 'Negative argument';
|
||||
recur {
|
||||
my $m = shift;
|
||||
$m < 3 ? 1 : recurse($m - 1) + recurse($m - 2);
|
||||
} $n;
|
||||
}
|
||||
13
Task/Anonymous-recursion/Perl/anonymous-recursion-2.pl
Normal file
13
Task/Anonymous-recursion/Perl/anonymous-recursion-2.pl
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
sub fib {
|
||||
my ($n) = @_;
|
||||
die "negative arg $n" if $n < 0;
|
||||
# put anon sub on stack and do a magic goto to it
|
||||
@_ = ($n, sub {
|
||||
my ($n, $f) = @_;
|
||||
# anon sub recurs with the sub ref on stack
|
||||
$n < 2 ? $n : $f->($n - 1, $f) + $f->($n - 2, $f)
|
||||
});
|
||||
goto $_[1];
|
||||
}
|
||||
|
||||
print(fib($_), " ") for (0 .. 10);
|
||||
6
Task/Anonymous-recursion/Perl/anonymous-recursion-3.pl
Normal file
6
Task/Anonymous-recursion/Perl/anonymous-recursion-3.pl
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
sub fibo {
|
||||
my $n = shift;
|
||||
$n < 0 and die 'Negative argument';
|
||||
no strict 'refs';
|
||||
$n < 3 ? 1 : (caller(0))[3]->($n - 1) + (caller(0))[3]->($n - 2);
|
||||
}
|
||||
5
Task/Anonymous-recursion/Perl/anonymous-recursion-4.pl
Normal file
5
Task/Anonymous-recursion/Perl/anonymous-recursion-4.pl
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
use v5.16;
|
||||
say sub {
|
||||
my $n = shift;
|
||||
$n < 2 ? $n : __SUB__->($n-2) + __SUB__->($n-1)
|
||||
}->($_) for 0..10
|
||||
Loading…
Add table
Add a link
Reference in a new issue