Perlでユークリッドの互除法

簡単そうだったんで、wikipediaの最初の説明だけみて実装。

#!/usr/bin/env perl
use strict;
use warnings;

my ($x, $y) = (1071, 1029);
print euclidean($x, $y), "\n";

sub euclidean {
    my ($x, $y) = @_;
    my $r = $x % $y;
    return $y if $r == 0;
    return euclidean($y, $r);
}

いかんいかん。再帰なんかいらないじゃないか。

sub euclidean {
    my ($x, $y) = @_;
    while(my $r = $x % $y){
        ($x, $y) = ($y, $r);
    }
    return $y;
}