首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何递归计算a%b?

问如何递归计算a%b?
EN

Stack Overflow用户
提问于 2013-12-11 10:17:22
回答 3查看 125关注 0票数 0

我需要编写一个递归函数,它返回两个数字的其余部分。以下是我写的:

代码语言:javascript
复制
def remainder(a,b):
    if a==b:
        return 0
    else:
        k=a-b 
        return a-b + remainder(b,a-k)

如果我们测试remainder(5,3),函数将返回2并且它是正确的,但是如果我们测试余数(15,3),我们将得到12和它的false。我只是不知道怎么调试。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-11 10:27:48

您缺少了一个案例:(当a

代码语言:javascript
复制
def remainder(a,b):
    if a<b: #trivial: remainder = a - b*0 = a
        return a
    else: #reduce the problem to a simple one
        return remainder(a-b, b)

测试:

代码语言:javascript
复制
print remainder(15,3)

输出:

代码语言:javascript
复制
0

在这里,如果您很懒并且不想写超过2行的话:

代码语言:javascript
复制
def remainder(a,b):
    return a if a < b else remainder(a-b, b)
票数 2
EN

Stack Overflow用户

发布于 2013-12-11 10:27:00

应该是这样的:

代码语言:javascript
复制
def remainder(a,b):
if a<b:
    return a
else:
    return remainder(a-b,b)
票数 1
EN

Stack Overflow用户

发布于 2013-12-11 10:27:56

你可以:

代码语言:javascript
复制
def remainder(a, b):
    if a < b:
        return a
    return remainder(a - b, b)

示例:

代码语言:javascript
复制
>>> remainder(15, 3)
0
>>> remainder(14, 3)
2
>>> remainder(13, 3)
1

如果是a < b,那就意味着我们完成了:我们知道计算的结果,我们可以返回a。否则,我们需要从b中减去a,然后再递归地调用remainder。然后,这种情况可以反复进行,直到a小于b为止。一旦发生这种情况,递归就停止了(也就是说,它不会再次调用remainder ),但是我们能够返回结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20516384

复制
相关文章

相似问题

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