python踩雷(二):递归时遇到TypeError: unsupported operand type(s) for *: ‘int‘ and ‘NoneType‘ 解决

先来看一段递归时的代码:

1
2
3
4
5
6
7
8
9
10
11
# 递归版阶乘

temp = int(input('输入一个正整数: '))

def factorial(n):
    if n == 1:
        print(1)
    else:
        print( n * factorial(n-1))

factorial(temp)

起初我的想法是,在factorial()函数里,直接用print打印,在后续直接调用函数就可以得到结果了。
但是,在实际调用时报错如下: TypeError: unsupported operand type(s) for *: 'int' and 'NoneType' 意思是,不支持int类型和非类型数据的运算。
这句话本身是可以理解的,但是究竟错在哪里呢?
于是我又按照正常的格式写了一次代码:

1
2
3
4
5
6
7
8
9
10
# 递归版阶乘

temp = int(input('输入一个正整数: '))
def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)

print(factorial(temp))

这次重新运行,就没有报错了。
这说明,是函数里的print出了问题。 于是,我仔细查了print函数的用法。print函数可以输出 各种单个数据类型,但是没有打印组合数据类型的用法。所以,函数里还是老老实实的用return,然后在调用的时候 加上print打印出结果,避免踩雷。
不知道有没有小伙伴和我遇到同样情况的,我的解释仅供参考,毕竟我也是python的初学者,理解还不够深刻。谢谢~