神秘的递归函数python

-2 python recursion

def mystery_code(n):
    return mystery_recursive(n, n-1)

def mystery_recursive(a, b):
    if b<=0:
        return 0
    else:
        c=mystery_recursive(a,b-1)
        if a%b==0:
            c+=b
        return c
Run Code Online (Sandbox Code Playgroud)

有人可以帮我理解这段代码的作用吗?

Sim*_*ser 6

它计算了适当除数的总和n.

如果您通过代码你会看到它调用,例如,mystery_recursive(5, 4)然后递归mystery_recursive(5, 3),mystery_recursive(5, 2),mystery_recursive(5, 1),mystery_recursive(5, 0).它会返回0因为b <= 0.

在每个这些调用中,它将调用的结果分配给cif a % b == 0(即a可以除以b),然后将其添加bc.所以你最终会得到一个正确的除数n.