La subrutina normalise llama a _hcf (del inglés
highest common factor o en español máximo común divisor)
para permitir la reducción de la fracción:
sub _hcf {
my ($x, $y) = @_;
($x, $y) = ($y, $x) if $y > $x;
return $x if $x == $y;
while ($y) {
($x, $y) = ($y, $x % $y);
}
return $x;
}
La subrutina _hcf
es ''puro cálculo'' por lo que la implementación
Perl es obviamente inferior en rendimiento a la correspondiente
versión C:
$ cat -n hcf.c
1 int hcf(int x, int y) {
2 int t;
3
4 if (y > x) {
5 t = x; x = y; y = t;
6 }
7 if (x == y) return x;
8 while (y) {
9 t = x;
10 x = y;
11 y = t % y;
12 }
13 return x;
14 }
Casiano Rodríguez León
