Python 将迭代解转换为递归解
我目前正在处理一个问题,需要我设计一个函数,该函数将“0”、“1”和“X”的字符串作为参数,并返回一个生成器,该生成器生成X的不同组合,并将其转换为1和0 ie:通过“0XX1”,将返回一个生成-> 0001, 0101, 0011, 0111 我已经迭代地解决了这个问题,但需要能够递归地解决它。解决这类问题的最佳方法是什么?在这样一个复杂的问题中,嗯,对我来说很复杂!,如何识别基本情况和递归情况 下面是我的迭代解决方案:Python 将迭代解转换为递归解,python,recursion,iteration,generator,Python,Recursion,Iteration,Generator,我目前正在处理一个问题,需要我设计一个函数,该函数将“0”、“1”和“X”的字符串作为参数,并返回一个生成器,该生成器生成X的不同组合,并将其转换为1和0 ie:通过“0XX1”,将返回一个生成-> 0001, 0101, 0011, 0111 我已经迭代地解决了这个问题,但需要能够递归地解决它。解决这类问题的最佳方法是什么?在这样一个复杂的问题中,嗯,对我来说很复杂!,如何识别基本情况和递归情况 下面是我的迭代解决方案: from typing import Generator def bin
from typing import Generator
def binary_strings(string: str) -> Generator[str, None, None]:
listOfIndices = []
starterString = ''
for index, char in enumerate(string):
if char == 'X':
starterString = starterString + '0'
listOfIndices.append(index)
else:
starterString = starterString + char
def stringGenerator(): #generates the different combos
baseString = starterString
moddedString = ''
n = len(listOfIndices)
counter = 1
for i, character in enumerate(
starterString):
if i == 0:
yield starterString
else:
break
while counter <= n:
for i, chara in enumerate(baseString):
if i in listOfIndices:
moddedString = baseString[:i] + '1' + baseString[i + 1:]
yield moddedString
counter += 1
if counter > n and n >= 1:
counter = 1
n -= 1
baseString = moddedString
break
else:
continue
return stringGenerator()
忽略简单的基本情况,即没有X可替换的情况下,binary_stringss=binary_stringss'+binary_stringss,其中s'是s,第一个X替换为0,s是s,第一个X替换为1。递归函数通常更容易推理且更短。通常,您将从基本案例开始。在这里,您可以想象一个空字符串会产生什么样的函数。可能吧 接下来,如果您的第一个字符不是X,那么您只需生成第一个字符加上递归调用其余字符的结果。如果是和X,那么您将同时产生1+递归调用和0+递归调用。比如:
def combos(s):
if len(s) == 0:
yield ''
return
head, *tail = s
for combo in combos(tail):
if head == 'X':
yield '1'+ combo
yield '0'+ combo
else:
yield head + combo
s = '0XX1'
list(combos(s))
#['0111', '0011', '0101', '0001']
为什么它需要递归?这是一个递归问题。我首先迭代地解决了它,因为我认为我能够更容易地识别出一个递归解决方案——我错了——现在我被难住了!。你被允许使用模块函数吗?我宁愿不使用,这样我就可以真正开始从概念上和实践上掌握这类问题。这是否回答了你的问题?哇,短多了!谢谢你的帮助。现在对我来说更有意义了