【发布时间】:2013-10-14 19:18:17
【问题描述】:
我必须检查我抛出异常以结束递归而不是返回的代码的运行速度有多快
我的返回代码是这样的:
def factorial(self, n):
if n==0:
return 1
else:
return n* self.factorial(n-1)
现在我的代码带有 raise:
def factorial2(self, n):
if n==0:
raise Exc(1)
else:
return n* self.factorial2(n-1)
我不知道,它是否应该看起来像这样,我应该怎么做才能获得价值 我已经尝试过这样的事情
try:
print factorial2(n)
except Exc:
1
但它不起作用。我什至不知道我是否接近好的解决方案。
谁能帮帮我,给我一些建议?
【问题讨论】:
-
如果你想衡量性能,抛出异常不是一个好主意。
-
为什么不@第四只眼?
-
我认为这就是她想要衡量的......两者之间的性能差异......(它只是退出递归的另一种方式......)他们之间的速度差异可能会非常小
-
引发异常(除非您在
factorial2的每个实例中都捕获它)破坏了递归调用的目的。它可能更快,但也会出错,因为函数的正确性取决于factorial2返回成功后发生的乘法。 -
@JoranBeasley 引发异常时,不应该展开堆栈吗?
标签: python exception recursion