【问题标题】:how to compute a%b recursively?如何递归计算 a%b?
【发布时间】:2013-12-11 19:58:12
【问题描述】:

我需要编写一个递归函数来返回两个数字的余数。这是我写的:

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 并且它是错误的。我只是不知道如何调试它。

【问题讨论】:

  • 你想和%做同样的事情,但没有%

标签: recursion python-3.x


【解决方案1】:

你错过了一个案例:(当a

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)

测试:

print remainder(15,3)

输出:

0

如果你很懒不想写超过 2 行的话,这里:

def remainder(a,b):
    return a if a < b else remainder(a-b, b)

【讨论】:

    【解决方案2】:

    应该是这样的:

    def remainder(a,b):
    if a<b:
        return a
    else:
        return remainder(a-b,b)
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      def remainder(a, b):
          if a < b:
              return a
          return remainder(a - b, b)
      

      例子:

      >>> remainder(15, 3)
      0
      >>> remainder(14, 3)
      2
      >>> remainder(13, 3)
      1
      

      如果a &lt; b 则意味着我们完成了:我们知道计算的结果,我们可以返回a。否则,我们需要从a 中减去b,然后再次递归调用remainder。然后可以重复继续,直到a 小于b。一旦发生这种情况,递归就会停止(即,它不会再次调用remainder)但我们能够返回结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-17
        相关资源
        最近更新 更多