如何在没有使用递归的*符号的情况下相乘?

时间:2016-09-19 16:35:00

标签: python recursion

因此,对于python上的编程类的作业,我们应该相互乘以整数(n,m)而不使用*符号(或其他乘法形式)。我们应该使用递归来解决这个问题,所以我尝试只添加n本身,m次。我认为我的问题是使用递归本身。我在互联网上搜索了递归用法,没有结果。这是我的代码。有人能指出我正确的方向吗?

    def mult(n,m):
        """ mult outputs the product of two integers n and m
            input: any numbers
        """
        if m > 0:
            return n + n 
            return m - 1
        else:
            return 1

3 个答案:

答案 0 :(得分:1)

我不想在这里给你作业的答案,所以希望我能提供一个可以帮助你的递归的例子:-)。

# Here we define a normal function in python
def count_down(val):
    # Next we do some logic, in this case print the value
    print(val)

    # Now we check for some kind of "exit" condition. In our
    # case we want the value to be greater than 1. If our value 
    # is less than one we do nothing, otherwise we call ourself
    # with a new, different value.
    if val > 1:
        count_down(val-1)

count_down(5)

您如何将此应用于您目前正在进行的工作?也许,而不是打印一些东西,你可以让它返回一些东西......

答案 1 :(得分:0)

您拥有正确的机制,但您尚未内化搜索中找到的基础知识。递归函数通常分为两种情况:

  1. 基础案例 - 你怎么知道你什么时候做的?那时你想做什么?
  2. 在这里,您已经确定您的基本情况是乘数为0时。此时您想要返回什么?请记住,您将此作为一个加法过程:我相信您需要加性标识元素 0 ,而不是乘法 1

    1. 递归案例 - 做一些简单的事情来简化问题,然后用这个简化的版本重复。
    2. 在这里,您已经发现想要提高运行总和并将乘数减少1.但是,您还没有再次调用您的函数。你没有适当地增强任何累积金额;你把被乘数增加了一倍。此外,你对递归感到困惑: return 是回到任何调用此函数的东西。对于递归,你会想要像

      这样的东西
      mult(n, m-1)
      

      现在请记住这是一个函数:它返回一个值。现在,你需要用这个值做什么?例如,如果您尝试计算4 * 3,则上述语句将为您提供4 * 2的值,您如何处理该值,以便您可以将4 * 3的正确值返回到任何值叫这个实例?你会想要像

      这样的东西
      result = mult(n, m-1)
      return [...] result
      

      ...您必须填写 [...] 点。如果需要,可以将它们组合成一行代码;我只是想让你更轻松。

答案 2 :(得分:0)

谢谢你们,我想通了! 我必须返回0而不是1,否则答案总是比我们想要的高一个。 我理解你如何调用这个函数,这是我错过的主要内容。 这就是我所做的:

    def mult(n,m):
        """ mult outputs the product of two integers n and m
            input: any numbers
        """
        if m == 0:
            return 0
        else:
            return n + mult(n, m - 1)