模数运算递归

时间:2016-02-16 16:10:23

标签: python recursion

为了练习一点点递归,我尝试在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,但更新了我需要更改的那个?

2 个答案:

答案 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