再帰

クイックソートの一件で、再帰があまり理解できていないことが判明した。
なので再帰を勉強してみる。
インスパイヤ先↓
お気楽 Python プログラミング入門:第3回再帰定義と高階関数


とりあえず、簡単な例で階乗の計算をやってみる。

def rec(n):
    if n == 0:
        return 1
    return n*rec(n-1)


def rec2(n, ans = 1):
    if n == 0:
        return ans
    return rec2(n-1, n*ans)

def main():
    n = 10

    ans = rec(n)
    print "rec() = " + str(ans)

    ans = rec2(n)
    print "rec2() = " + str(ans)


if __name__ == "__main__":
    main()


結果

C:\practice\Python\2-23>python rec.py
rec() = 3628800
rec2() = 3628800

一応解説。
関数rec()は自力で書いたもの、普通。
そして、今回初め知ったものが関数rec2()の書き方。
末尾再帰と言うらしい。
初めて聞いた(汗)
知識なさ杉。
なんか変な感じやけど、理屈を理解できると案外こっちの方が読みやすいかも。
再帰は懐が深そうな感じやけど、ちょっとずつ理解していきたい。