在python3中将for循环转换为递归函数

时间:2017-12-06 09:48:46

标签: python recursion

是否可以转换以下循环:

c = 0
for a in find:
    c += 1
return c

对于使用递归而不使用外部库的函数,find是[a,b,c,d]之类的列表?

3 个答案:

答案 0 :(得分:1)

def count(ls):
    if not ls:  # empty
        return 0
    return count(ls[1:]) + 1

像这样使用:

>>> find = [a, b, c, d]
>>> count(find)
4

答案 1 :(得分:0)

我设法通过定义以下函数来实现:

def ric(find, n, c):    
    if n < len(find):
        if find[n] in find:
            c += 1
        n += 1
        return ric(find, n, c)
    else:
        return c

并使用ric(find, 0, 0)

进行调用

答案 2 :(得分:0)

这样简单的事情会起作用:

def to_rec(lst):
    # base case, when list is empty
    if not lst:
        return 0

    # recursive case
    return 1 + to_rec(lst[1:])

基本情况:如果列表中没有元素,请返回0

递归情况:否则返回1 +列表的长度,减去一个元素,这就是为什么我们在这里使用[1:]来忽略列表的头部。

您还可以使用辅助函数显式设置累加器。如果您曾经使用过函数式编程语言,例如Haskell或Prolog,这种技术非常流行。这是它的样子:

# main function
def to_rec(lst):

    # calls helper function with starting accumulator of 0
    return accum(lst, 0)

def accum(lst, acc):

    # returns accumulator instead
    if not lst:
        return acc

    # increments accumulator, and looks at the tail of the list
    return accum(lst[1:], acc + 1)

两者的工作原理如下:

>>> print(to_rec(['a', 'b', 'c', 'd']))
4
>>> print(to_rec([]))
0
>>> print(to_rec(['a']))
1