python - 模运算递归

标签 python recursion

为了练习一点递归,我尝试用 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/

相关文章:

java - 返回链表中节点的位置,递归方法

python - re.RegexObject 不存在(引发 AttributeError)

python - Django图像字段: full or relative path?

python - 基于其 MRO 创建类的扁平化表示

python - 如何将字符串加密成大小相同的字符串是Python

java - 使用命令行参数来完成河内程序?

python - 在 OS X 10.4.11 上升级 Python

algorithm - 线性递归、二元递归与运行时间的关系

recursion - 为什么按分号后程序又回到深度递归?

java - 递归得到n人k组不同组合的个数