2017-03-03 108 views
-2

我在理解递归方面有点麻烦,所以任何帮助/理解都将非常感谢。我正在尝试编写一个代码,其中两个非数字会相乘。听起来很简单,尽管除了在两个初始函数中使用(除之外)之外,将使用NO(*,+或 - )运算符。这些用于将n加n 2次,直到n_2​​的值。乘法递归

例:3 + 4> 3 + 1 + 1 + 1 + 1 = 7

n = int(input()) 
n_2 = int(input()) 

def inc(n): 
    return n + 1 

def dec(n): 
    return n - 1 

有然后必须调用返回到先前的两个功能的附加功能,再不能使用( *,+或 - )。然后使用这个加法函数通过使用add函数基本上将n乘以n_2次来“分散”单独函数中的数字。

谢谢!

更新:人们评论说,我问这是为了获得作业答案/作弊。我正在问这个问题,以了解递归并获得有关难题的帮助。你不需要用完整的代码来回答这个问题,我只是要求帮助我指导我理解这个主题。具体说明了递归如何运作,并对问题提供了一点指导。问题是,我正在寻找解决使用递归的例子。

+1

做你自己的功课。或者在大学时交朋友来取而代之。 –

+0

你会从做这项工作中学到更多,而不是要求别人去做。 –

+0

尝试先考虑解决方案。 – jtitusj

回答

0

如果您不习惯递归作为一个概念,它可能有助于从使用您拥有的工具的迭代解决方案开始。你已经意识到,你可以表达3 + 4为3 + 1 + 1 + 1 + 1,并写在Python是使用循环的一种方法:

def iterative_add(n, n_2): 
    for _ in range(n_2): 
     n = inc(n) 
    return n 

现在,我们需要打开这成了一个递归的解决方案。递归解决方案的决定性特征是,不是找出多少次重复某个事情,而是做一点问题,并且再次调用自己来执行其余的部分。在这里,明显的一点,我们所能做的就是调用inc一次,然后我们再次调用同一个函数做下inc - 所以我们开始是这样的:

def recursive_add(n, n_2): 
    return recursive_add(inc(n), n_2) 

这显然会继续下去,永远,所以我们需要考虑如何让它停止。在迭代版本中,当我们调用inc完全为n_2时,我们停止,但在这里我们没有任何明显的方式来跟踪我们调用它的次数。一个好的方法是考虑分解3 + 4 = 3 + 1 + 1 + 1 + 1,并认识到一旦我们添加了第一个1,剩下的问题就是(3 + 1)+(1 + 1 + 1 )= 4 + 3。所以我们每次递减n_2,在每一步有效地将右边括号中的'1'移到左边,以便下一个将是((3 + 1)+1)+(1 + 1)。当右括号为空时,我们可以停止。

在Python中,我们可以这样写:

def recursive_add(n, n_2): 
    if n_2 == 0: 
     return n 
    return recursive_add(inc(n), dec(n_2)) 

值得注意的是递归的工作方式是 “建立” 的表述((((3 + 1)+1)+1 )+1),然后开始从最内侧的括号开始评估它。如果你可以围绕这个概念进行思考,你应该能够以同样的方式轻松地编写一个递归乘法解决方案。

+0

谢谢!!!正是我所寻找的,比其他在线例子更容易理解。这有助于很多!再次谢谢你! – BorutoUzumaki