Problem 1 - Project Euler
面白そうだったのでこれから少しずつ挑戦していこうと思います。
まずは1問目
10未満の自然数のうち、3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり、 これらの合計は 23 になる。
同じようにして、1,000 未満の 3 か 5 の倍数になっている数字の合計を求めよ。
もちろんPythonで解こうと思うのですが、最近Schemeとかかじっちゃってるのでせっかくだし普通のループではなくて再帰で解いてみようと思ったのでした。
何度かの修正を経て出来上がったのがこちら…!
def Euler1(n, ans=0): if n == 0: return ans elif n % 3 == 0: return Euler1(n - 1, ans + n) elif n % 5 == 0: return Euler1(n - 1, ans + n) else: return Euler1(n - 1, ans)
ドヤ顔で実行こんなんでました。
RuntimeError: maximum recursion depth exceeded
どうやら「最大再帰深度を超えているよ」ってことらしい。そういえばどこかでPythonの再帰は回数制限があるとか見た記憶あるや…。
調べてみたところ、この最大再帰深度はsysモジュールのsetrecursionlimitという関数で変えられるみたい。
>>> import sys >>> sys.setrecursionlimit(1100) # 1000だとまだだめだったので適当に。 >>> Euler1(999) 233168
解けた!