递归函数返回余数

时间:2018-11-10 12:15:52

标签: python function recursion

我被要求在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 :(得分:1)

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

短得多...

答案 1 :(得分:1)

我相信您的老师可能只是在尝试不带商的余数。

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))

主要提示,您无需检查n的范围(0,5)。