为了练习一点递归,我尝试用 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
,但更新我需要更改的那个?
最佳答案
就像弗雷德里克提到的,你需要第三个参数
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))
关于python - 模运算递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35437430/