Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中递归和迭代阶乘程序的时间和复杂性测试_Python_Algorithm - Fatal编程技术网

Python中递归和迭代阶乘程序的时间和复杂性测试

Python中递归和迭代阶乘程序的时间和复杂性测试,python,algorithm,Python,Algorithm,我尝试检查递归和迭代程序计算阶乘的内存复杂性 我假设解决方案是O(N),乘法的实现方式并不有趣 但当我比较递归和迭代两种情况的求解时间时,我得到了不同的结果 Time of execution of factorial (loop) : 521.7680931091309 Time of execution (recursive) : 1214.137077331543 导入时间 #O(n)复杂性 def阶乘(n): 结果=1 对于范围(1,n+1)内的i: 结果*=i 返回结果 #O(

我尝试检查递归和迭代程序计算阶乘的内存复杂性

我假设解决方案是
O(N)
,乘法的实现方式并不有趣

但当我比较递归和迭代两种情况的求解时间时,我得到了不同的结果

Time of execution of factorial (loop) : 521.7680931091309 
Time of execution  (recursive) : 1214.137077331543 
导入时间
#O(n)复杂性
def阶乘(n):
结果=1
对于范围(1,n+1)内的i:
结果*=i
返回结果
#O(n)复杂性
def阶乘记录(n):

如果n递归解比非递归解运行得慢。这是意料之中的。递归解决方案涉及大量的函数调用开销


两个
O(n)
算法的运行时并不相同。它们具有相同的复杂性,但是
O(n)
的定义涉及一个未指定的比例常数(在线性情况下,这只是直线的斜率)。并非所有直线都具有相同的坡度。递归情况的斜率刚好大于非递归情况的斜率。这样想吧。如果
n=10
,则递归函数需要10次函数调用。如果
n=20
,则需要20个函数调用,等等。请注意这是如何线性上升的,因此是斜率的一部分。在非递归情况下,没有与此成本相对应的内容。除了函数调用开销之外,计算主要是乘法(这在两种情况下是相同的)——因此递归函数的效率几乎明显较低。这会产生另一个函数没有的成本。

您两次都使用
factorial
而不是对其中一个函数使用
factorial\u rec
,但这个问题仍然有意义。@johncolman请尝试执行。在您最初的问题中,运行时间似乎是相同的(这就是你似乎要问的,因为如果它们是的话,那将是令人惊讶的)。经过修改,你似乎在问为什么它们是不同的,尽管它们都是
O(n)
。我同意这个问题是有道理的,尽管它是基于对big-O符号的误解。