11 的可分性检验的递归函数?

Bun*_*rts 2 python recursion

11 的整除性测试指出,如果一个数的奇数和偶数之和之差能被 11 整除,则称整个数能被 11 整除。

例如,7689,其中奇数之和 = 9 + 6 = 15,而偶数之和 = 8 + 7 = 15。

由于 (15 - 15) % 11 == 0,该数字可被 11 整除。

我写了一个迭代函数来评估这个,如果数字确实可以被 11 整除,则给出 True 的结果。如何编写此代码的递归版本?我很难分解这个问题。

def divisible_by_11_iter(num):
    num_lst = [i for i in str(num)]
    even_sum = 0
    odd_sum = 0
    for even in num_lst[::2]: # naming does not really matter as negatives taken into acc
        even_sum += int(even)
    for odd in num_lst[1::2]:
        odd_sum += int(odd)
    if (odd_sum - even_sum) % 11 == 0:
        return True
    else:
        return False
Run Code Online (Sandbox Code Playgroud)

Blc*_*ght 5

您当前的代码不是迭代的,它只是通过在最后对差异进行实际模数来“欺骗”。如果你能做到something % 11 == 0,你应该num在顶部这样做,而不要乱七八糟地对数字求和。

无论如何,要递归地实现这一点,您需要弄清楚可以轻松解决的基本情况是什么。我建议您可以非常轻松地解决小于 11 的正值。零是可整除的,0 到 11 之间的所有数字都不可整除。

对于较大的数字,您可以进行数字求和和递归。

def divisible_by_11(num):
    if num == 0:
        return True
    if num < 11:
        return False
    num_lst = [int(i) for i in str(num)]
    even_sum = sum(num_lst[::2])
    odd_sum = sum(num_lst[1::2])
    return divisible_by_11(abs(even_sum - odd_sum))
Run Code Online (Sandbox Code Playgroud)