擅长:python、mysql、java
<p>代码中缺少的关键内容是:</p>
<ol>
<li>因为您希望函数返回一个列表,所以基本情况(n==1)需要返回一个列表,正如Blckknght在他的答案中解释的那样。</li>
<li>非基本情况(n>;1)也需要返回某些内容!在编写递归代码时,忽略了从每个执行路径返回的内容,这是一个非常常见的错误。</li>
</ol>
<hr/>
<p>这个版本是一个递归生成器。它不返回一个列表,它是一个iterable,一次只生成一个阶乘值,但是如果需要,可以很容易地在列表中捕获这些值。在</p>
<pre><code>def gen_factorial(n):
if n == 1:
yield 1
else:
for u in gen_factorial(n - 1):
yield u
yield u * n
for u in gen_factorial(5):
print(u)
print(list(gen_factorial(8)))
</code></pre>
<p><strong>输出</strong></p>
^{pr2}$