是否可以转换以下循环:
c = 0
for a in find:
c += 1
return c
对于使用递归而不使用外部库的函数,find是[a,b,c,d]
之类的列表?
答案 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