我写了一个递归阶乘:
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没有上报错误?
发布于 2019-12-03 08:47:18
当n不是1时,您不会返回任何内容。请更改为:
def factorial(n):
if n > 1: return n * factorial(n-1)
return 1
print(factorial(3))在IPython块中,您添加了缺少的return,但对于负数,它将返回None。
发布于 2019-12-03 08:58:05
您需要返回n> 1的阶乘
def factorial(n):
if n > 1:
return n * factorial(n - 1)
return 1
print(factorial(3))https://stackoverflow.com/questions/59148692
复制相似问题