3

私はPython 2.7.3を使用しており、この機能を持っています:

def f(n):
    if n == 0:
        return 0
    else:
        return (n % 3 == 0 or n % 5 == 0) * n + f(n - 1) 
f(999)

f(993) までは動作しますが、f(999) までは動作しません。私が試してみると、無限の量のエラーが飛び出し続けます。理解できません。誰が何が悪いのか教えてもらえますか?

編集: 回答ありがとうございます。Pythonで反復を使用したほうがよいと思います。

4

3 に答える 3

3

反復を使用する方が良い:

def f(n):
    s = 0
    while n > 0:
        s += (n%3==0 or n%5==0)*n
        n -= 1
    return s
print f(999)

出力:

233168

また、これを次のように書くこともできますsum:

def f(n):
    return sum((n%3==0 or n%5==0)*n for n in reversed(range(1,n+1)))
于 2013-04-20T09:53:38.520 に答える