为了实现一点递归,我尝试在python递归中重写modulo
函数。20%6
产生2
。
我试图通过以下方式来处理它:经常将m
添加到自身,直到它变得比a
更大。如果是这样,则减去a-m
并返回该值。
def mod1(a,m):
if m == a:
return 0
elif m < a:
return mod1(a,m+m)
else:
return a - m
mod(20,6)
> -4
但是,我遇到的问题是,我在m
上添加的m
更改了。在递归的第一步,它是6+6
,在第二次迭代中,它不是12+6
,而是12+12
。如何“保留”我的原始m
,但更新我需要更改的那个?
发布于 2016-02-16 16:17:41
就像弗雷德里克提到的,你需要第三个理由
def mod1(a,m,i):
if m*i == a:
return 0
elif m*i < a:
return mod1(a,m,i+1)
else:
return a-m*(i-1)
print(mod1(20,6,1))
为了保持带有两个参数的调用,使函数def
看起来像
def mod1(a,m,i=1)
....
print(mod1(20,6))
发布于 2017-01-04 15:32:39
与其添加您可能希望从a
中减去的内容,相反,m
是常量。
def mod1(a,m):
if m == a:
return 0
elif m < a:
return mod1(a-m, m)
else:
return a
https://stackoverflow.com/questions/35437430
复制相似问题