我写了一个递归阶乘:
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))