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)
您当前的代码不是迭代的,它只是通过在最后对差异进行实际模数来“欺骗”。如果你能做到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)
| 归档时间: |
|
| 查看次数: |
534 次 |
| 最近记录: |