May 18, 2012 11:19
Меня тут попросили сделать лабораторку по сям по теме «разложение числа в сумму чисел Фибоначчи», ну а я решил расслабить разум на работе и написал бета-версию на перле =)
#!/usr/bin/perl
use strict;
use POSIX;
sub round
{ return int($_[0]+.5); }
sub Fib{ round((((1+sqrt(5))/2)**$_[0])/sqrt(5)); }
my $value = $ARGV[0];
my $begin = 0; my $end = 20; my $tmp; my $sum = 0;
$|=1;
$end+=10 while (Fib($end)<$value);
while (!((&Fib($begin)<$value)&&(&Fib($end)>$value)&&($end-$begin==1))){
$tmp = ceil (($begin + $end) / 2);
if (&Fib($tmp) > $value){
$end = $tmp;
} else { $begin = $tmp; }
die "Alredy Fibonacci number =)n" if ((&Fib($begin)==$value) || (&Fib($end)==$value)) ;
}
print "$value = ";
$tmp=$begin;
while ($sum != $value){
if (&Fib($tmp)+$sum<=$value){
print " + " unless ($tmp == $begin);
$sum += &Fib($tmp);
print &Fib($tmp);
}
$tmp--;
die if $tmp == 0;
}
print "n";
меткаобозначающаяотсутствиеметки,
Технократия