V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
azev
V2EX  ›  问与答

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

  •  
  •   azev · Nov 1, 2018 · 858 views
    This topic created in 2738 days ago, the information mentioned may be changed or developed.
    就是这么一段程序
    ---
    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?
    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2392 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:54 · PVG 09:54 · LAX 18:54 · JFK 21:54
    ♥ Do have faith in what you're doing.