嵌套for循环以在Python中递归
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌套for循环以在Python中递归相关的知识,希望对你有一定的参考价值。
我需要在Python中使用递归重写这段可怕的代码。嵌套的深度应该取决于函数rec的参数,但事实上我希望它是变量“a”的长度,即字符串。我很感激任何回应和线索如何处理这个问题。
def rec():
count=0
for i in range(len(letters)):
for j in range(i+1, len(letters)):
if letters[i]+letters[j] in a:
for k in range(j+1, len(letters)):
if letters[i]+letters[j]+letters[k] in a:
if letters[i]+letters[j]+letters[k]==a:
count+=1
else:
for l in range(k+1, len(letters)):
if letters[i]+letters[j]+letters[k]+letters[l]==a:
count+=1
return count
答案
FWIW,使用itertools比使用递归更容易表达某些类型的组合逻辑。例如,当出现此模式时:
letters = 'ABCDEF'
for i in range(len(letters)):
a = letters[i]
for j in range(i+1, len(letters)):
b = letters[j]
for k in range(j+1, len(letters)):
c = letters[k]
print(a, b, c)
它可以替换为:
from itertools import combinations
letters = 'ABCDEF'
for a, b, c in combinations(letters, 3):
print(a, b, c)
你的问题还有很多,但我想指出组合函数是这个问题中提出的那种逻辑的一个很好的起点。
另一答案
这个糟糕的代码可以在迭代中重写如下,但它会降低效率。同样适用于递归函数。
def rec():
count=0
for i in range(len(letters)):
for j in range(i+1, len(letters)):
for k in range(j+1, len(letters)):
if letters[i]+letters[j]+letters[k]==a:
count+=1
continue
for l in range(k+1, len(letters)):
if letters[i]+letters[j]+letters[k]+letters[l]==a:
count+=1
return count
另一答案
只是递归解决方案......
def rec(letters, a):
return sum(rec(letters[i+1:], a[1:])
for i, c in enumerate(letters)
if c == a[0]) if a else 1
演示:
>>> rec('onerene', 'one')
4
以上是关于嵌套for循环以在Python中递归的主要内容,如果未能解决你的问题,请参考以下文章