それで、私は再帰をアイドル状態でいじっていました.再帰を使用したループが通常のwhileループよりもはるかに遅いことに気付きました.誰かがその理由を知っているかどうか疑問に思っていました. 以下に行ったテストを含めました。
>>> import timeit
>>> setu="""def test(x):
x=x-1
if x==0:
return x
else:
test(x)
"""
>>> setu2="""
x=10
while x>0:
x=x-1
"""
>>> timeit.timeit(stmt="test(10)",setup=setu,number=100)
0.0006629826315997432
>>> timeit.timeit(stmt=setu2,number=100)
0.0002488750590750044
>>> setu="""def test(x):
x=x-1
if x==0:
return x
test(x)
"""
>>> timeit.timeit(stmt="test(10)",setup=setu,number=100)
0.0006419437090698921
しかし、前回のテストで、else
ステートメントを取り出すとわずかに速度が向上していることに気付いたので、このループ速度の違いは if ステートメントが原因でしょうか?