python中的递归:返回计算vs out参数

python中的递归:返回计算vs out参数,python,recursion,Python,Recursion,我在factorial这样的例子中学习了递归,其中递归调用返回一个等价的数学函数,通过每次返回进行计算 这似乎比使用out参数存储向下的计算更优雅、更可证明 这两种方法在python中的优缺点是什么 编辑: 我最初的问题含糊不清,不准确,所以我在下面添加了不同风格的例子 def factorial_1(x): def helpFactorial_1(x,out): if x==1: return out else:

我在factorial这样的例子中学习了递归,其中递归调用返回一个等价的数学函数,通过每次返回进行计算

这似乎比使用out参数存储向下的计算更优雅、更可证明

这两种方法在python中的优缺点是什么

编辑:

我最初的问题含糊不清,不准确,所以我在下面添加了不同风格的例子

def factorial_1(x):

    def helpFactorial_1(x,out):
        if x==1:
            return out
        else:
            return helpFactorial_1(x-1,x*out)
    return helpFactorial_1 (x,1)
VS

虽然我不是Python程序员,但您的第二个版本在我看来显然更好。因为它使用了一半的变量和函数,所以它更短、更简单。假设没有优化,它在每个堆栈帧中只存储一个值而不是两个值,从而使用更少的内存。即使解释器或编译器将递归转换为循环,第二个版本概念上的简单性也使其更可取


我认为阶乘不是递归的好练习,因为从一开始就将其作为循环计算并不比作为递归函数更困难,对某些人来说甚至更容易。

两者都使用递归,都会向调用者返回无值或其他值。Python没有out参数,尽管您可以使用可变对象与调用者“共享”值。你到底在找什么?谢谢你的反馈,我澄清了我的问题。
def factorial_2(x):
    if x==1:
        return 1
    else:
        return x*factorial_2(x-1)