递归阶乘,报告错误"类型错误:不支持的操作数类型*:'int'和"无类型"



我写了一个递归阶乘:

In [2]: %paste      
def factorial(n):
if n == 1: return 1
if n > 1 : n * factorial(n-1)
print(factorial(3))
## -- End pasted text --

但它报告错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-10-da8388695f0c> in <module>
2     if n == 1: return 1
3     if n > 1 : n * factorial(n-1)
----> 4 print(factorial(3))
<ipython-input-10-da8388695f0c> in factorial(n)
1 def factorial(n):
2     if n == 1: return 1
----> 3     if n > 1 : n * factorial(n-1)
4 print(factorial(3))
TypeError: unsupported operand type(s) for *: 'int' and 'NoneType'

我找不到返回NoneType的位置。

有趣的是,当我逐行输入 ipython 时,它可以工作。

In [11]: def fact(n): 
...:     if n == 1: return 1 
...:     if n > 1 : return n * fact(n-1) 
...:            
In [12]: fact(3)    
Out[12]: 6

第一个解决方案有什么问题?

解决方案1 与解决方案 2 相同,为什么解决方案 2 不报告错误?

n不是 1 时,您不会返回任何内容。更改为此内容:

def factorial(n):
if n > 1: return n * factorial(n-1)
return 1
print(factorial(3))

在您的 IPython 块上,您添加了缺少的返回,但它会为负数返回 None。

你需要返回 n> 1 的阶乘

def factorial(n):
if n > 1:
return n * factorial(n - 1)
return 1
print(factorial(3))

相关内容

最新更新