2013-12-11 110 views
0

我需要编写一个返回两个数字的余数的递归函数。这是我写的:如何递归计算%b?

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和它的虚假。我只是不知道如何调试它。

+0

你想做'%'做同样的事情,但没有'%'? – keltar

回答

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 

这里,如果你是懒惰,不想写超过2行:

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

应该是这样的:

def remainder(a,b): 
if a<b: 
    return a 
else: 
    return remainder(a-b,b) 
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。否则,我们需要从a减去b,我们再次递归地调用remainder。这可以重复继续,直到a小于b。一旦发生递归停止(即不会再次调用remainder),但我们能够返回结果。