Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 递归阶乘,报告错误`TypeError:不支持的操作数类型*:';int';和';非类型'`_Python - Fatal编程技术网

Python 递归阶乘,报告错误`TypeError:不支持的操作数类型*:';int';和';非类型'`

Python 递归阶乘,报告错误`TypeError:不支持的操作数类型*:';int';和';非类型'`,python,Python,我写了一个递归阶乘: 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) <ipy

我写了一个递归阶乘:

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'
第一个解决方案有什么问题


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

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

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

在IPython块上,您添加了缺少的返回值,但对于负数,它将不返回任何值。

您需要返回n>1的阶乘

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

print(factorial(3))

如果n>1:返回n*fact(n-1)
,我假设不会得到负数。但是它报告错误
不支持*:'int'和'NoneType'的操作数类型。。。负数的阶乘不像正数那么简单。代码的问题只是缺少返回。对于负片和碎片,您可以保持两个ifs都返回
None
。问题是解决方案2的效果与解决方案1相同。它们不相同,
%paste
命令结果的第三行缺少
后的返回。如果这些片段不相同,请仔细查看,第一个缺少
返回
。这是一个很好的例子,说明了为什么您应该坚持使用PEP8并将
if else
语句分解为块,而不是作为单行。这会更清楚
def factorial(n):
    if n > 1:
        return n * factorial(n - 1)
    return 1

print(factorial(3))