再帰関数を思い出してみる

学生の頃、階乗計算を行う再帰関数をC言語で書かされた。

「どんどん階層を下っていって、底にたどり着いたら遡って計算して帰ってくる」とかいった説明を受けた気がする。if文使って最後を判定してreturnで1とか返してた気がするなぁ、とか思い出しながら適当な関数を再帰処理で実装してみた。

/**
 * 前月以前 $num ヶ月分の日数を再帰計算
 *
 * @param Integer $num 過去 $num ヶ月
 * @return Integer 過去 $num ヶ月の日数
 */
function getDaysOfPastMonths($num) {
    if ($num == 0) {
        return 0;
    } else {
        return date("t", mktime(0, 0, 0, date("m")-$num, 1, date("Y"))) + getDaysOfPastMonths($num-1);
    }
}

当月を含まない過去Nヶ月の日数を計算してみる。今月の3ヶ月前なら、31(1月)+31(12月)+30(11月)=92日。ループで計算できるし、効率がどうっていうとこまで理解できてないから、これでどうって事は言えない。とりあえず、なんでもかんでもループで回してた気がするので、これを機会に再帰処理を使ってこうかな、と。今回の実装が正しい再帰処理になってるのか微妙だけど、動くしいいかなと。ちなみに上記コードはPHP。

プロフィール

このブログ記事について

このページは、koshigoeが2006年2月 3日 21:00に書いたブログ記事です。

ひとつ前のブログ記事は「del.icio.us post on 2006-02-01」です。

次のブログ記事は「svnのdiffは何で見たらいいんだ?」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。