Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

再帰処理なんて

はてブからこちらのエントリを見た。
ループを使わずに配列を逆にするヤツ : D-7 <altijd in beweging>
こういうのとか、あの有名なバベルの塔(追記:ハノイの塔の誤り)のやつとか、フィボナッチ数列のやつとか、基礎の基礎みたいな階乗のやつとか。
本当に再帰処理というのは見るたびにすごいなーと思ってしまう。
プログラミングをやり始めてもうすぐ二年くらいだけど、やっぱり自分ではなかなかこういう発想に辿り着かない。
自分自身を呼び出すって何なの?、みたいな感じになってしまう。
いや、理屈ではちゃんとわかってるんだけど、うーん、なんていうか、自然界にない動きというか。


なので、「配列内要素逆転」は自分ならこれしかできない。
(上のエントリが「ループを使わず」に主眼を置いているのは承知しています)

sub rev {
  if (@_) {
    my @r;
    while (my $elm = shift @_) {
      unshift @r, $elm;
    }
    return @r;
  }
}


そもそもの今のコンピュータからしてノイマン型だし、ちゃんとわかっていないといけない概念ではあるのだけれど、ほんと、難しく感じてしまうから困ったものだ。