python为什么返回值是None

redstoneleo 2012-07-18 04:20:28
原本这是一个递归写得计算阶乘的程序,现在被我改了一下如下

>>> def factorial(n):
if n == 1:
return 1
else:
factorial(n-1)
结果当我
>>> print(factorial(7))
None
之前我还以为返回值应该是1的,可没想到竟然是none,谁能解释下,O(∩_∩)O谢谢

return factorial(n-1) 我是知道的啦,原以为执行else:
factorial(n-1)
后便又会调用factorial(n-1),然后继续递归下去,直到返回值为1停止,可返回值最后竟然是none,我很纳闷啊!!!
...全文
1516 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
M_A_D_ 2015-01-05
  • 打赏
  • 举报
回复 1

希望能帮到您!
a77169a 2012-08-31
  • 打赏
  • 举报
回复 1
return 1
else:
return n * fact(n-1)
zy007 2012-08-30
  • 打赏
  • 举报
回复 1
1楼正解
redstoneleo 2012-08-29
  • 打赏
  • 举报
回复 1
[Quote=引用 1 楼 的回复:]
很正常呀,你的else分支没有return语句,那么缺省的返回值就是None,也就是除了factorial(1)返回1之外,其他情况就是None,所以你应该写成return factorial(n-1)
[/Quote]

回答得非常好
qq120848369 2012-07-22
  • 打赏
  • 举报
回复 1
默认函数返回None。
  • 打赏
  • 举报
回复 1
def factorial(n):  
if n == 1:
return 1
else:
return factorial(n-1)
iEverX 2012-07-20
  • 打赏
  • 举报
回复 1
[Quote=引用 1 楼 的回复:]

很正常呀,你的else分支没有return语句,那么缺省的返回值就是None,也就是除了factorial(1)返回1之外,其他情况就是None,所以你应该写成return factorial(n-1)
[/Quote]
正解。。没有return则返回None
奔跑哥 2012-07-18
  • 打赏
  • 举报
回复 1
def fact(n):
if n == 1 or n == 0:
return 1
else:
return n * fact(n-1)

print fact(7)
angel_su 2012-07-18
  • 打赏
  • 举报
回复 1
很正常呀,你的else分支没有return语句,那么缺省的返回值就是None,也就是除了factorial(1)返回1之外,其他情况就是None,所以你应该写成return factorial(n-1)

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧