我需要编写一个返回两个数字的余数的递归函数。这是我写的:如何递归计算%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和它的虚假。我只是不知道如何调试它。
我需要编写一个返回两个数字的余数的递归函数。这是我写的:如何递归计算%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和它的虚假。我只是不知道如何调试它。
你丢失的情况下:(当< 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)
应该是这样的:
def remainder(a,b):
if a<b:
return a
else:
return remainder(a-b,b)
你可以这样做:
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
),但我们能够返回结果。
你想做'%'做同样的事情,但没有'%'? – keltar