Vilibb
@Vilibb
Пытаюсь изучить какой-либо ЯП.

Почему не работает рекурсивная функция?

Не могу понять, почему код, который ниже, не работает. Идея такая: есть предел от 1 до 11, к числу из [1, 11] мы прибавляем число не из диапазона, но как только мы доходим до крайнего предела, мы продолжаем прибавлять с числа, на котором начинается предел.
Например: диапазон от 1 до 3, мы к 2 прибавляем 4 и получаем 3. (т.е. 2+(1)=3, 3+(1)=1, 1+(1)=2, 2 +(1) = 3.

def ab(a,b):
    rangA = 1
    rangB = 11
    ans = a+b
    if ans <= rangB:
        return ans
    else:
        c = b - (rangB-a)
        a = 0
        ab(a,c)
  • Вопрос задан
  • 443 просмотра
Решения вопроса 1
GavriKos
@GavriKos
В вызове рекурсии в последней строчке не должно ли быть так:
return ab(a,c)
?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Небольшой оффтоп, но вдруг пригодится.
Здесь можно обойтись без рекурсии. Операции в кольце вычетов производятся по модулю основания, т.е. результатом является остаток от деления (в вашем случае на 11). Но это даст нам диапазон [0,10], т.к. остаток деления 11 на 11 есть 0. Но 0 и 11 принадлежат к одному классу вычетов (имеют одинаковые остатки при делении на основание), а значит они эквивалентны, и мы можем заменить одно другим, тем самым получив диапазон [11, 1..10]:
z = 11 #основание
def ab(a,b):
    res = (a + b) % z
    if res == 0:
        return z
    else:
        return res
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы