这些都正确使用递归吗?这个比那个好吗?

时间:2019-06-21 22:32:04

标签: python python-3.x recursion

我试图更好地理解递归。

作为示例,这里有两个用于计算n的定义! :

def factorial(num, p=1):
    if num == 0:
        return p
    else:
        p *= num
        return factorial(num-1,p)

def factorial(num):
   if num == 1:
       return num
   return num * factorial(num - 1)

一个比另一个好吗?我知道第二个建立一个调用栈,而第一个则在每个步骤计算p并将其传递给函数的另一个迭代。这些功能类型是否有单独的名称?第一个不是递归吗?

只需在此处寻求一些理解差异的指导。谢谢!

1 个答案:

答案 0 :(得分:0)

两者之间几乎没有区别。我会说“越简单越好”,第二个涉及较少的变量,所以我会选择那个。

或更简单的东西:

  def factorial(N): return max(1,N) if N<3 else N*factorial(N-1)

但是在现实生活中,您不应该递归实现它,因为迭代解决方案会更快。