リカーシブ!/ついでにリファレンス渡しの練習

なんか自分のやってることのレベルが低すぎて嫌になるけど諦めない。

#! /usr/bin/perl -w
use strict;
use Carp;

print <<EOT;
リカーシブ!/ついでにリファレンス渡しの練習
EOT

#メソッドの定義は不適当。2変数は冗長
sub recu{
  my ($tem,$sum) = (shift(),${shift()});
  $sum += $tem--;
  return \$sum if($tem < 1);
  &recu($tem,\$sum);
}

sub recu2{
  my ($limi,$sum2) = (shift,shift);
  $sum2 += $limi--;
  return $sum2 if($limi < 1);
  &recu2($limi,$sum2);
}

use Time::HiRes;
#ついでに覚えたてのTime::Hiresを使ってみる

#リファレンス渡し、リファレンス返り
my $time = Time::HiRes::gettimeofday();
for(my $i=0;$i<100000;$i++){&recu(10,\0);}
print Time::HiRes::gettimeofday()-$time,"\n";

#リファレンス渡しじゃないとどうなるのだろう
$time = Time::HiRes::gettimeofday();
for(my $i=0;$i<100000;$i++){&recu2(10,0);}
print  Time::HiRes::gettimeofday()-$time,"\n";

print <<EOT;
リファレンスの方が遅い
メモリは知らん
っていうかベンチマークに不適当な気がするの。
リカーシブを&recu2(100,0)とかすると
再帰が深いよ!って怒られる。。。フムフム
EOT