这两种方法都正确使用递归吗?一个比另一个好吗?

2024-04-20 13:32:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力更好地理解递归。你知道吗

作为一个例子,这里有两个定义来计算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并将其传递给函数的另一个迭代。这些类型的函数有单独的名称吗?第一个不是递归吗?你知道吗

只是想在这里寻找一些关于理解差异的指导。谢谢!你知道吗


Tags: 方法函数名称类型returnif定义堆栈
1条回答
网友
1楼 · 发布于 2024-04-20 13:32:43

两者之间没有什么区别。我会说“越简单越好”,第二个包含的变量越少,所以我会选择那个。你知道吗

或者更简单的事情:

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

但是在现实生活中,你不应该递归地实现它,因为迭代解会更快。你知道吗

相关问题 更多 >