为什么递归函数执行时间平均更快,python 中的迭代次数更多?

问题描述

我正在比较 python 中两个不同函数的速度。它们是某种通用算法的两种实现,一种是递归的,另一种是使用堆栈。

当使用 time 和 timeit 查看单次迭代的速度时,递归实现大约慢 40 倍。这是可以预料的,因为递归相对较慢。

但是,当我同时使用 time 和 timeit 运行 1000000 次迭代时,为递归实现完成所有这些迭代所花费的时间仅比堆栈实现慢 30%。

这对我来说毫无意义。之所以使用time,是为了在对递归函数计时的时候检查timeit是否运行正常,因为我认为一定是出现了一些错误

需要注意的是,我确保在为每个函数计时时使用相同数量的迭代。我也多次运行这些计时,仍然得到相同的结论。

是否有任何潜在原因可以解释为什么更多的时间迭代导致这种递归算法与非递归版本相比实际上在速度上如此接近?

很遗憾我无法显示实现代码。我不需要明确的答案,我只是想要关于为什么会这样的潜在想法。然而,这是你的基本

iterationNum=100000
print(timeit.timeit(recursiveImplementation,number=iterationNum))
print(timeit.timeit(stackImplementation,number=iterationNum))

解决方法

如果您发现测试 1 次迭代和 1000 次迭代之间存在很大差异,则递归函数很可能使用了保存在全局变量中的某种形式的记忆,从而加快了后续调用的速度。请记住,可变默认参数也可能以全局范围结束。无论如何,递归实现肯定会产生影响后续调用的副作用