def print_numbers(n, k):
"""Print all numbers that (A) can be formed from the digits of `n` in reverse
order and (B) are multiples of `k`.
Args: n (int): The number that results must use digits from.
k (int): The number that results must be multiples of.
>>> print_numbers(97531, 5)
135
15
35"""
def inner(n,s):
if n == 0:
if s % k == 0 and s > 0:
print(s)
else:
inner(n // 10, s*10 + n % 10) #first
inner(n // 10, s) #second
inner(n,0)
У меня проблемы с пониманием части рекурсивных вызовов. Насколько я понимаю, второй рекурсивный вызов не может быть вызван до того, как первый достигнет фазы, когда он должен дать возвращаемое значение. Однако то, что делает первый вызов (в примере): он дает внутренний (9753,1), внутренний (975,13), внутренний (97,135), внутренний (9,1357), внутренний (0,13579)
Поскольку тогда n равно 0, s (13579) не делится на k (5), поэтому он ничего не печатает. Более того, по способу построения функции возвращаемое значение - None. Итак, когда достигается внутренняя (0,13579) фаза, второй рекурсивный вызов должен начать работать, однако он будет постоянно пытаться 0 // 10 и не будет продолжаться.
Это мое понимание. Вы можете указать, в чем я не прав?