【问题标题】:Russian Peasant Multiplication Python using recursive-tail使用递归尾的俄罗斯农民乘法 Python
【发布时间】:2015-10-01 17:12:17
【问题描述】:

我尝试编写此代码并运行它,但结果显示“无”。 我通过在循环函数中添加另一个 else 进行了编辑,然后它实际上产生了一个 int 结果“57”,这不是答案。

def double(n):

    return n*2

def halve(n):

    return n//2

def mult(m,n):

    def loop(m,n):

            if n>1:
                if n%2 != 0:
                    return m + loop(double(m),halve(n))
                else:
                    return m #added another else
            else:
                return m

    if n>0:
            return loop(m,n)
    else:
            return 0

print(mult(57,86))

【问题讨论】:

  • 它应该做什么?
  • 86>186%2 == 0,你在loop 函数中还缺少一个else
  • 它应该使用俄罗斯农民乘法算法打印 57 * 86 的乘法结果。

标签: python recursion multiplication


【解决方案1】:

通过简单的递归

def double(n):
    return n * 2

def halve(n):
    return n // 2

def mult(m, n, a = 0):
    if n % 2 != 0:
        a = a + m
        m = double(m)
        n = halve(n)
    if n % 2 == 0:
        m = double(m)
        n = halve(n)
    if n != 0:
        return mult(m, n, a)
    return a

print(mult(57, 86))

通过嵌套函数

def double(n):
    return n * 2

def halve(n):
    return n // 2

def mult(m, n):

    def loop(m, n, a = 0):

        if n % 2 != 0:
            a = a + m
            m = double(m)
            n = halve(n)
        if n % 2 == 0:
            m = double(m)
            n = halve(n)
        if n != 0:
            return loop(m, n, a)
        return a
    return loop(m, n)

print(mult(57, 86))

【讨论】:

  • 谢谢,但是可以通过函数本身的递归来实现吗?
  • 但是如何真正以尾递归算法的形式实现呢?
猜你喜欢
  • 2010-09-20
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
相关资源
最近更新 更多