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

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

  •  
  •   azev · 2018 年 11 月 1 日 · 805 次点击
    这是一个创建于 2714 天前的主题,其中的信息可能已经有所发展或是发生改变。
    就是这么一段程序
    ---
    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   ·   Solana   ·   4003 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:53 · PVG 08:53 · LAX 17:53 · JFK 20:53
    ♥ Do have faith in what you're doing.