首页 > 解决方案 > Python - 从 2 参数递归调用返回单个值

问题描述

所以我正在尝试制作一个简单的程序来检查一个数字中是否连续有 2 个 8。我知道我可以简单地做

def double_eights(n):
    return '88' in str(n)

但我想尝试编写下面的递归方法

def double_eights(n, counter=0):
    #base cases
    if counter == 2:
        return True
    if n == 0:
        return False
    #recursive calls
    if n % 10 == 8:
        return(double_eights(n//10, counter + 1))
    else:
        return(double_eights(n//10), 0)

然而,虽然这会返回正确的结果,但由于参数的传入方式,有时它会返回一个元组,其中包含它传递的所有非 8 数字的 0。例如:

>>> double_eights(2882)
(True, 0)
>>> double_eights(80808080)
((((False, 0), 0), 0), 0)

有没有办法让函数只返回TrueorFalse值而不需要解析返回的元组?

提前致谢!

标签: pythonrecursion

解决方案


问题出在代码的最后一行。您返回double_eights(n//10)call 和的结果0,因此这些值被打包在tuple.

您可以将代码的最后一行更改为

return(double_eights(n//10, 0))

指定counter值,但这不是必需的,因为counter有默认值

def double_eights(n, counter=0):

所以你不需要指定它。最终代码可能如下所示:

def double_eights(n, counter=0):
    #base cases
    if counter == 2:
        return True
    if n == 0:
        return False
    #recursive calls
    if n % 10 == 8:
        return(double_eights(n//10, counter + 1))
    else:
        return(double_eights(n//10))

输出:

double_eights(2882)
True
double_eights(80808080)
False

推荐阅读