以下のpythonコードを実行すると、
def main():
#print prime_factors(10)
print prime_factors(9)
def prime_factors(n, i=2, factors=[]):
if n==1:
return factors
if(n%i==0):
factors.append(i)
n = n/i
return prime_factors(n, i, factors)
else:
return prime_factors(n, i+1, factors)
if __name__ == '__main__':
main()
期待される結果を返し、9 の素因数を返します。
[3, 3]
2 行目の "print prime_factors(10)" からコメントを削除すると、奇妙なことが起こります。10 の場合はすべて問題ありませんが、9 の場合は 9 の素因数だけでなく、10 の素因数も含まれています。
[2, 5]
[2, 5, 3, 3]
2 つのオプションの引数を指定して関数を呼び出すと、
def main():
print prime_factors(10, i=2, factors[])
print prime_factors(9, i=2, factors[])
すべて正常に動作します。
[2,5]
[3,3]
理由がわかりません。これはスコープの問題だと思いますが、理解できません:-(どんな助けもありがたいです。