乘法递归

时间:2017-03-03 04:47:27

标签: python function python-3.x recursion multiplying

我在理解递归方面遇到了一些麻烦,因此非常感谢任何帮助/理解。我正在尝试编写一个代码,其中两个非数字将成倍增加。听起来很简单,虽然除了两个初始函数之外,还有NO(*,+或 - )运算符,如下所示。这些用于将n加n再加n_2次,直到n_2​​的值。

Ex: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函数,再次不能使用(*,+或 - )。然后使用此add函数通过使用add函数基本上将n乘以n_2次来“乘以”单独函数中的数字。

谢谢!

更新:人们正在评论我要求此作业答案/作弊。我要求这样理解递归并获得有关难题的帮助。你不需要用完整的代码来回答问题,我只是在寻求帮助来指导我理解这个主题。具体来说,递归是如何工作的,只需要对问题进行一些指导。问题是我希望使用递归来解决的问题。

1 个答案:

答案 0 :(得分: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),然后开始评估它从最里面的括号出来。如果你可以围绕这个概念,你应该能够以同样的方式轻松编写递归乘法解决方案。