2016-09-19 23 views
-4

所以作为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 
+7

提示:通常情况下,递归涉及的函数的代码路径中的至少一个呼叫_itself_。 – mgilson

+5

尝试根据基本情况和递归情况来定义乘法。基本情况是* zero *,而不是1,因为0的任何东西总是0.递归的情况是'n + mult(n,m-1)',所以'n'被加到'n'和' m'减去1. –

+1

看看[在Python中构建递归函数](http://stackoverflow.com/questions/479343/how-can-i-build-a-recursive-function-in-python)或它的链接问题[Python的递归基础知识](http://stackoverflow.com/questions/30214531/basics-of-recursion-in-python) – JGreenwell

回答

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) 

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

0

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

  1. 基础案例 - 您如何知道何时完成?那时你想做什么?

在这里,你已经发现你的基本情况是乘数为0的情况。你现在想要返回什么?记住,你正在做这个过程:我相信你需要添加剂的标识元素,而不是乘法的。

  1. 递归情况 - 做一些简单的事情来简化问题,然后重复这个简化版本。

在这里,你已经知道你想增强运行总和并将乘数减少1.但是,你没有再次调用你的函数。你没有适当地增加任何累积金额;你已经使被乘数翻倍了。此外,你对递归感到困惑:返回是回到所谓的这个函数。对于递归,你会想要类似

mult(n, m-1) 

现在请记住,这是一个函数:它返回一个值。现在,你需要用这个值做什么?例如,如果你想计算4 * 3,上面的语句会给你4 * 2的值,你会怎么做,以便你可以返回4 * 3的正确值给任何叫做这个的东西实例?你会想是

result = mult(n, m-1) 
return [...] result 

...,你必须填写该[...]点。如果你愿意,你可以将它们组合成一行代码;我只是想让你更容易。

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)