有什么方法可以防止此递归函数在总数上添加初始数字

时间:2019-02-01 10:24:51

标签: python

我正在尝试创建一个递归函数,该函数返回可被四整除的数字之和,但从总数中排除数字本身,例如 print(divFour(8))应该给我4个而不是12个,而print(divFour(9))应该给我12个。

def divFour(n):
    if n == 0:
        return 0
    else:
        return n % 4 + divFour(n-1) 

print(divFour(8))

print(divFour(8)) == 4; print(divFour(7)) == 4; print(divFour(9)) == 12

3 个答案:

答案 0 :(得分:1)

检查以下代码:

def divFour(n):
    if n == 0:
        return 0
    else:
        res = n-1 if (n-1)%4 == 0 else 0
        return res + divFour(n-1)

print(divFour(9))

输出:

12

答案 1 :(得分:0)

您可以对for使用简单的range循环:

def div_k(n, k=4):
    val = 0
    for i in range(n):
        val += i * (i % k == 0)
    return val

res = div_k(8)  # 4
res = div_k(9)  # 12

或者,您可以使用生成器。嵌套函数结构纯粹是为了使您不必调用sum 外部 div_k

def div_k(n, k=4):
    def div_gen(n, k):
        for i in range(n):
            yield i * (i % k == 0)
    return sum(div_gen(n, k))

答案 2 :(得分:0)

以防万一,您实际上不需要任何递归来计算它。您可以只使用数学:

def divFour(n):
    div = (n-1) // 4
    return 4 * div*(div+1)/2
相关问题