V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
azev
V2EX  ›  问与答

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

  •  
  •   azev · 2018-11-01 16:42:29 +08:00 · 600 次点击
    这是一个创建于 2001 天前的主题,其中的信息可能已经有所发展或是发生改变。
    就是这么一段程序
    ---
    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?
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5029 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 05:39 · PVG 13:39 · LAX 22:39 · JFK 01:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.