大伙看看这个 Python 里递归函数的问题?

2018-11-01 16:42:29 +08:00
 azev
就是这么一段程序
---
import logging


def calcPath(id, path):
id = id - 1
if(id == 0):
logging.warn(('=0', id, path))
return path
else:
logging.warn(('!=0', id, path))
path = calcPath(id, str(id) + '.' + path)
# return path

# 函数外
num = 3
print calcPath(num, str(num))
---

在 else 里那个 return path 有注释(即如上原始代码)的情况下执行两次
返回这样的两次结果

第一次
WARNING:root:('!=0', 2, '3')
None
WARNING:root:('!=0', 1, '2.3')
WARNING:root:('=0', 0, '1.2.3')

第二次
WARNING:root:('!=0', 2, '3')
WARNING:root:('!=0', 1, '2.3')
WARNING:root:('=0', 0, '1.2.3')
None



去掉注释后执行两次
第一次
WARNING:root:('!=0', 2, '3')
1.2.3
WARNING:root:('!=0', 1, '2.3')
WARNING:root:('=0', 0, '1.2.3')

第二次
WARNING:root:('!=0', 2, '3')
1.2.3
WARNING:root:('!=0', 1, '2.3')
WARNING:root:('=0', 0, '1.2.3')


有两个疑问:
为什么最后的输出反而比递归里的输出要早?
为什么 else 里没有 return 会拿到 None?
600 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/503468

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX