首页 > 解决方案 > 递归函数计算11是否除以一个数字

问题描述

我正在尝试编写一个递归函数(使用 Python)来计算 11 是否除以一个数字而不使用休息,减法 11。我只需要使用这个规则https://en.wikipedia.org/wiki/11_(number )

该代码有效,但是..我想知道是否有办法缩小它,也许不需要变量“k”?

def f(n, k=0):
    if n=="" : return 0
    t = ((-1)**(len(n)-1))*int(n[0]) + f(n[1:],k+1)
    if k == 0:
        if t <= -11 or t >= 11:
            return f(str(abs(t)))
        elif t == 0:
            return True
        else:
            return False
    return t

标签: pythonalgorithmrecursion

解决方案


让我们将设计翻转为(n 个未优化的)尾递归,因此我们不使用k检测返回到顶层,而是传递t向下的增长值并在遇到基本情况时进行最终计算:

def f(n, t=0):
    if not n:
        if -11 < t < 11:
            return t == 0

        return f(str(abs(t)))

    return f(n[1:], int(n[0]) - t)

现在我们总是返回一个布尔值,而不是之前混合的布尔值和整数结果!


推荐阅读