我在Python中实现这个有困难。我想写一个输入n为(唯一)的函数,它递归地生成一个阶乘值列表1。。。n!在
到目前为止,我已经考虑过将n阶乘的递归派生值存储在一个变量中,然后添加(push?)把它们列在一个列表中。我的问题是如何“保存”列表?我不知道如何检查一个列表是否存在,以及。。。在
def recFactorial(n):
if n == 1:
return 1
print(l)
else:
l = []
f = n * recFactorial(n-1)
if l:
l = l.push(f)
else:
l = []
代码中缺少的关键内容是:
这个版本是一个递归生成器。它不返回一个列表,它是一个iterable,一次只生成一个阶乘值,但是如果需要,可以很容易地在列表中捕获这些值。在
输出
^{pr2}$递归函数调用看不到对同一函数的其他调用的局部变量。如果您希望多个调用能够使用同一个列表,那么列表必须是函数的参数或返回值(或者我假设是一个全局变量,但这将是一个非常糟糕的设计)。在
在这种情况下,我认为将list作为函数的返回值传递是最简单的。它将在基本情况下创建,其中您将返回普通列表
[1]
。每个外部调用都会向列表追加一个值(并使用之前在列表上的最后一个值进行计算)。在当您在递归中遇到局部变量的问题时,我建议您添加一个包装器函数。下面这个呢?在
输出:
^{pr2}$如果递归不是那么重要,您可以编写一个简单的生成器:
然后
输出:
^{pr2}$或者,也可以使用
next()
来延迟计算值。如果您不熟悉python生成器,您可能会看到this。在相关问题 更多 >
编程相关推荐