Рекурсивная функция, которая возвращает остаток - PullRequest
0 голосов
/ 10 ноября 2018

Я получил указание определить рекурсивную функцию в Python, которая находит остаток от n, деленный на b, с условием , чтобы не использовать оператор "/", "%" или "//" . Я определил следующую функцию, которая отлично работает для положительных чисел. Есть ли лучший способ сделать это, используя рекурсию и простые условия .

def division(n, b, q = 1):
    """
    parameters : a et b (integers)
    returns: the remainder of a and b
    pre-requisites : q = 1
    """
    if n <= 0 or n < b:
        if n == 0:
            print("Your division has no remainder.")
        elif n in range(0,5):
            print("Your remainder is", n)
        return 0
    else:
        return division(n - b, b, q) + q

print(division(274,5))

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Я полагаю, ваш учитель, вероятно, только пытался найти остатки без коэффициентов.

def division(n, b):
    if n < b:
        return n
    return division(n - b, b)
print(division(274, 5))

Однако, так как вы подняли его, вы можете сделать это с частным, без необходимости начинать с 1 по умолчанию.

def division(n, b, q = 0):
    if n < b:
        return n, q
    return division(n - b, b, q + 1)
print(division(274, 5))

Основные выводы, вам не нужно проверять диапазон (0,5).

0 голосов
/ 10 ноября 2018

А как же

def remainder(n, q):
    if(n < q):
        return n
    return remainder(n - q, q)

print(remainder(274, 5)) # will return: 4
print(remainder(275, 5)) # will return: 0
print(remainder(123, 3)) # will return: 0

намного короче ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...