Удивлен хорошей рекурсивной производительностью в python
========================================================

Я написал эту довольно плохую функцию Python для простой факторизации:

и это работало, как и ожидалось, теперь меня интересовало, может ли производительность быть лучше при использовании итеративного подхода:

Но то, что я заметил (хотя функции дали одинаковые результаты), заключалось в том, что итеративная функция выполнялась дольше. По крайней мере, у меня было чувство, когда я делал это:

поэтому я измерил:

И вот что я получил:

Почему рекурсивный подход в этом случае быстрее, чем итеративный?

Я использую WinPython-64bit-3.4.4.2 (Python 3.4.4 64bit).

Это потому, что вы пересчитываете`sqrt` каждый раз. Эта модификация работает так же быстро, как и ваша рекурсивная версия:

`timeit` дает мне эти времена:

Я думаю, что крошечная разница, которая остается`for … in range(…)` быть быстрее, чем эквивалент`while` петля, как`for` Цикл может использовать генератор вместо того, чтобы выполнять кучу сравнений.