Python 11?整除性检验的递归函数?

Python 11?整除性检验的递归函数?,python,recursion,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)]

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

您当前的代码不是迭代的,它只是通过在最后执行实际的差模来“欺骗”。如果您可以执行
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))
def可被11整除(num):
如果num==0:
返回真值
如果num<11:
返回错误
num_lst=[int(i)表示str中的i(num)]
偶数总和=总和(num总和[::2])
奇数总和=总和(num总和[1::2])
返回可被_11整除的_(abs(偶数和-奇数和))

我不确定您为什么希望使用递归形式,但您的停止条件是什么?如果差异大于某件事,你会重复这些步骤吗?考虑数字7689。你所做的可以简化为7-6+8-9
def rec(num, oddsum=0, evensum=0, odd=True):
    m = num % 10 # First we extract the mod 10 and thus, effectively remove the first digit
    num = num // 10

    if odd:
        oddsum += m
    else:
        evensum += m

    if num == 0:
        return abs(oddsum - evensum) % 11 == 0 # Finally to end the recursion
    return rec(num, oddsum, evensum, not odd) # Notice how we flip the odd variable. So it becomes even in the next call.


print(rec(7689))
print(rec(11))
print(rec(22))
print(rec(420))

#Output

True
True
True
False