【问题标题】:How to return a value from a recursive Python function?如何从递归 Python 函数返回一个值?
【发布时间】:2016-08-10 20:21:02
【问题描述】:

这个问题似乎有点具体,对此我很抱歉,但这让我很困惑。我正在为自己编写一个密码生成器,它接受一个字符串(也就是网站的 URL)并将其处理成一个安全密码,该密码不能根据网站名称回溯。

在部分代码中,我创建了一个递归函数,如下所示:

def get_number(n = 0, nums = ''):
    for i in range(0, len(url)):
        #both n and nums are changed
    if len(nums) < num_length:
        get_number(n, nums)
    else:
        print(nums)
        return(nums)

...

print(get_number())

我希望'nums' 输出两次,因为我在 else 块中打印它并稍后打印返回。但是,如果它确实通过了递归循环,则从 else 块打印“nums”,并且该函数返回“None”。如果if len(nums) &lt; num_length 第一次为假,则返回正确的值。

如果我验证它返回的对象实际上不是之前的行“None”,为什么它会返回“None”?

我对 Python 有点陌生,他们处理递归的方式不同吗?

感谢您的宝贵时间

编辑:

问题已解决。忘记了递归调用的返回语句。谢谢:D

【问题讨论】:

    标签: python function recursion return


    【解决方案1】:

    我认为您在嵌套的get_number 之前缺少return。所以,它正在执行并返回,但你没有对递归值做任何事情。

    def get_number(n = 0, nums = ''):
        for i in range(0, len(url)):
            #both n and nums are changed
        if len(nums) < num_length:
            return get_number(n, nums)
    
        print(nums)
        return nums
    

    【讨论】:

    • 不客气!如果您的问题已解决,您介意将答案标记为已接受吗?这有助于过滤寻找未回答问题的人:)
    • 关键是你必须返回被调用的函数。某些语言允许您简单地返回最后调用函数的值。我应该说一些语言的一些编译器。 Win32 的 C++ 就是以这种方式工作的。调用堆栈查找最后一次递归调用以返回值,但在 python 中没有
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2017-01-02
    • 2014-05-01
    • 2012-10-16
    • 1970-01-01
    • 2021-06-11
    相关资源
    最近更新 更多