如何递归计算%b?

时间:2013-12-11 10:17:22

标签: recursion python-3.x

我需要编写一个递归函数,返回两个数字的余数。这是我写的:

def remainder(a,b):
    if a==b:
        return 0
    else:
        k=a-b 
        return a-b + remainder(b,a-k)

如果我们测试remainder(5,3),函数将返回2并且它是正确的但是如果我们测试余数(15,3), 我们会得到12而且是假的。我只是不知道如何调试它。

3 个答案:

答案 0 :(得分:2)

你错过了一个案例:(当一个< b)

def remainder(a,b):
    if a<b: #trivial: remainder = a - b*0 = a
        return a
    else: #reduce the problem to a simple one
        return remainder(a-b, b)

测试:

print remainder(15,3)

输出:

0

如果你很懒,而且不想写两行以上:

def remainder(a,b):
    return a if a < b else remainder(a-b, b)

答案 1 :(得分:1)

它应该是这样的:

def remainder(a,b):
if a<b:
    return a
else:
    return remainder(a-b,b)

答案 2 :(得分:1)

你可以这样做:

def remainder(a, b):
    if a < b:
        return a
    return remainder(a - b, b)

示例:

>>> remainder(15, 3)
0
>>> remainder(14, 3)
2
>>> remainder(13, 3)
1

如果a < b则意味着我们已经完成:我们知道计算的结果,我们可以返回a。否则,我们需要从b中减去a,然后我们再次递归调用remainder。然后可以反复继续,直到a小于b。一旦发生这种情况,递归就会停止(即,它不会再次调用remainder),但我们可以返回结果。