代码之家  ›  专栏  ›  技术社区  ›  Vicrobot

函数不重新调整值;但能够打印相同的值

  •  -1
  • Vicrobot  · 技术社区  · 6 年前

    请参见此功能:

    def beej(v):
        v = sum(map(int, list(str(v))))
        if len(str(v)) <=1:
            print("printed: {}".format(v))  
            return v
        beej(v)
    
    #outputs
    >>> beej(23)
    printed: 5
    5
    >>> beej(4221)
    printed: 9
    9
    >>> beej(422199)
    printed: 9
    >>> beej(999)
    printed: 9
    >>> beej(99)
    printed: 9
    >>> beej(923)
    printed: 5
    >>>
    

    所以,它只是为一些价值而工作,而不是为许多人工作。我想知道这背后的原因,以及如何找到这些隐藏的虫子。

    1 回复  |  直到 6 年前
        1
  •  1
  •   DeepSpace    6 年前

    递归调用中缺少RETURN语句:

    def beej(v):
        v = sum(map(int, list(str(v))))
        if len(str(v)) <= 1:
            print("printed: {}".format(v))  
            return v
        return beej(v)
    

    您当前的代码将只返回 v 如果第一次呼叫 beej (即无递归调用)生成一个数字和。