如何从递归Python函数返回值?

Joe*_*inn 0 python recursion return function

这个问题似乎有点具体,对此我很抱歉,但这让我感到困惑。我正在为自己编写一个密码生成器,它使用一个字符串(又称网站的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)
Run Code Online (Sandbox Code Playgroud)

...

print(get_number())
Run Code Online (Sandbox Code Playgroud)

我希望'nums'输出两次,因为我将其打印在else块中,然后再打印返回值。但是,如果确实经过递归循环,则从else块中打印'nums',并且该函数返回'None'。如果if len(nums) < num_length第一次为false,则返回正确的值。

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

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

感谢您的时间

编辑:

问题已解决。忘记了递归调用上的return语句。感谢:D

Kar*_*rin 5

我认为您在return嵌套之前缺少了一个get_number。因此,它正在执行并返回,但是您不会对递归的值做任何事情。

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
Run Code Online (Sandbox Code Playgroud)

  • 关键是你必须返回被调用的函数。某些语言允许您简单地返回最后调用的函数的值。我应该说一些语言的一些编译器。Win32 的 C++ 就是这样一种工作方式。调用堆栈查找最后一次递归调用以返回值,但不在 python 中 (2认同)