再帰の概念は自明ではない

車も車検のために召し上げられてしまった(どうせ日曜から土曜まで東京に行くので代車は頼まなかった)ので、研究室に行って NL 研の原稿を書いたりなどする。22日〆切なので、ちょっと焦った方がいいのかもしれないが……。

その傍ら新 M1 の人が「アルゴリズム概論」という授業で苦しんでいたので話を聞いたり教えてあげたり。ちなみにこの授業、3,4年ごとに松本研に回ってくる授業のようで、思い起こせば自分が M1 のころ(当時 D2 の) takahi-i さんと nozomi-k さんが TA だった気がする。いま自分は D3 なので、3年経ったから戻ってきた、ということだろうか……。

今年の授業の TA は(いずれも D1 の) katsumasa-y くんと masakazu-i くんが担当しているようだが、なかなか TA の仕事も大変なようで(こういう授業の準備意外にもアーカイブに残すためにビデオ撮影したり、トークとスライドを同期させるためにスライドにマークをつける作業が必要だったりと、細々と時間を取られる、と……)、お疲れさまですとしか言いようがない。

それで二分木探索なんかをやっているそうなのだが、再帰で書けばいいよね、と言って「再帰ってなんですか?」と言われてちょっとうなってしまった。そうか、再帰というのは知らないと分からないかも(スライドを探してみたが再帰の説明はどこにもない)。初めて知ったとき、というか初めて自分で書いて動かしてみたとき、これはすごい、とかなり感動したのだが、その感動もどこへやら、というわけで、すっかり忘れていたのを恥じ入る。

再帰というとフィボナッチ数列なんかを求めるのに再帰で書くとすっきり書ける、ということで、アルゴリズム概論の(ここではない)どこかで習うと思うのだが、頭で理解するのと動かすのとは違って、再帰だと呼び出しが深くなるとすぐメモリを食い尽くしてしまうのだが、反復的に書くとメモリ使用量を劇的に減らすことができる、というのは書いて実行してみると一目瞭然で、これは賢いことを考える人もいたものだ、と感心したものであった。

思えば自分も授業についていくのに必死で、明け方まで毎日スライドとにらめっこして復習したり課題解いたりしていたなぁ、と懐かしく思う。情報系の人にとっては NAIST の授業は簡単でつまらない、と評判悪いようだが、文系の人からするとどれもけっこうハード。「行列のテンチってなんですか」とシステム工学Iの最初の授業で質問したのをいまでも覚えている(それが毎日行列の転置しまくるようになるとは夢にも思わなかったが……)。ちなみに「レツフルランク」と聞いたらまず「列をなしてフルフルしているわんこ(特にブルドッグ)」を想像したのだが、全然違った(いま思うとそういう自分に嫌な顔一つせず授業中丁寧に教えてくれた杉本先生には非常に感謝している)。文系と理系で4年分知識が違うというのはこういうことか、と青くなって睡眠時間を削っていたものであった。

とはいえ、文系出身の人、いまの勉強が大変でもすぐ役に立つ(情報科学の基礎の基礎を教えてくれている)し、苦しいのも夏休みまでなので、しばらくの間我慢してがんばりましょう!