如何将函数重写为递归

时间:2018-11-10 07:46:51

标签: python recursion

我在python中具有此功能。当两个列表的长度相同时,它的作用类似于map(func,l1,l2)。它将功能应用于list1和list2中的所有项目。

def map2(func, l1, l2):
   result = []
   if len(l1) > 0:
       for i in range(len(l1)):
          result.append(func(l1[i], l2[i]))
   return result

如何将其重写为递归程序?

谢谢

1 个答案:

答案 0 :(得分:0)

使用列表的长度终止递归。
在此示例实现中,如果list中任何一个的长度为0,我们都将其全部映射,或者它是一个空的list,因此我们终止了递归。同样值得注意的是l1[1:]是我们尚未映射的list的一部分。

def map3(func, l1, l2):
    if (len(l1) == 0 or len(l2) == 0):
        return []

    return [func(l1[0], l2[0])] + map3(func, l1[1:], l2[1:])

让我们测试一下:

测试功能:

def func(a, b):
     return a * b

测试list

l1 = [1, 2, 3]
l2 = [4, 5, 6]

运行它:

print(map3(func, l1, l2))

输出:

[4, 10, 18] 
相关问题