为了练习一点点递归,我尝试在python recursive中重写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
。
如何&#34;保持&#34;我原来的m
,但更新了我需要更改的那个?
答案 0 :(得分:3)
像弗雷德里奇提到的那样你需要第三个论点
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))
答案 1 :(得分:0)
而不是添加你可能想要从a
中减去,这种方式m
是常量。
def mod1(a,m):
if m == a:
return 0
elif m < a:
return mod1(a-m, m)
else:
return a