首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模运算递归

模运算递归
EN

Stack Overflow用户
提问于 2016-02-16 16:10:23
回答 2查看 7.7K关注 0票数 1

为了实现一点递归,我尝试在python递归中重写modulo函数。20%6产生2

我试图通过以下方式来处理它:经常将m添加到自身,直到它变得比a更大。如果是这样,则减去a-m并返回该值。

代码语言:javascript
运行
复制
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,但更新我需要更改的那个?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-16 16:17:41

就像弗雷德里克提到的,你需要第三个理由

代码语言:javascript
运行
复制
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看起来像

代码语言:javascript
运行
复制
def mod1(a,m,i=1)
....
print(mod1(20,6))
票数 4
EN

Stack Overflow用户

发布于 2017-01-04 15:32:39

与其添加您可能希望从a中减去的内容,相反,m是常量。

代码语言:javascript
运行
复制
def mod1(a,m):
    if m == a:
        return 0
    elif m < a:
        return mod1(a-m, m)
    else:
        return a
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35437430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档