首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >递归阶乘,它报告错误` `TypeError:不支持*的操作数类型:'int‘和'NoneType'`

递归阶乘,它报告错误` `TypeError:不支持*的操作数类型:'int‘和'NoneType'`
EN

Stack Overflow用户
提问于 2019-12-03 08:44:58
回答 2查看 137关注 0票数 0

我写了一个递归阶乘:

代码语言:javascript
运行
复制
In [2]: %paste      
def factorial(n):
    if n == 1: return 1
    if n > 1 : n * factorial(n-1)
print(factorial(3))

## -- End pasted text --

但它会报告错误:

代码语言:javascript
运行
复制
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时,它可以正常工作。

代码语言:javascript
运行
复制
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没有上报错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-03 08:47:18

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

代码语言:javascript
运行
复制
def factorial(n):
    if n > 1: return n * factorial(n-1)
    return 1
print(factorial(3))

在IPython块中,您添加了缺少的return,但对于负数,它将返回None。

票数 1
EN

Stack Overflow用户

发布于 2019-12-03 08:58:05

您需要返回n> 1的阶乘

代码语言:javascript
运行
复制
def factorial(n):
    if n > 1:
        return n * factorial(n - 1)
    return 1

print(factorial(3))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59148692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档