2013-10-14 31 views
0

我要检查多少钱快的工作,我抛出异常来结束递归,而不是返回代码Python的调用引发异常,而不是在递归函数返回

我与返回的代码看起来是这样的:

def factorial(self, n): 
    if n==0: 
     return 1 
    else: 
     return n* self.factorial(n-1) 

现在我带升代码:

def factorial2(self, n): 
    if n==0: 
     raise Exc(1) 
    else: 
     return n* self.factorial2(n-1) 

我不知道,如果它看起来应该这样的,我应该怎么做才能我已经试过像某事的值 这

try: 
    print factorial2(n) 
except Exc: 
    1 

但它不起作用。我甚至不知道我是否接近良好的解决方案。

任何人都可以帮助我,给我一些提示吗?

+0

所有呼叫都将最终提高此异常,抛出异常不是一个好主意。 – thefourtheye

+0

为什么不能@第四只眼睛? –

+0

我想多数民众赞成她正在测量......两者之间的性能差异......(它只是退出递归的另一种方式......)他们之间的速度差异可能会相当小 –

回答

2

你需要在try /除了在这个函数的其他部分......因为如果你听外面那么如果要衡量性能的所有工作都将丢失

def factorial2(self, n): 
    if n==0: 
     raise Exc(1) 
    else: 
     try: 
      return n* self.factorial2(n-1) 
     except Exc: 
      return n 
+0

非常感谢。我不知道为什么我甚至没有想过把它放在一起。 – Anna