【发布时间】:2020-06-07 15:23:16
【问题描述】:
我目前正在解决一个问题,该问题需要我设计一个函数,该函数接受一串“0”、“1”和“X”作为参数,并返回一个生成器,该生成器产生 X 变为 1 的不同组合和0的
ie: 传递 '0XX1', 将返回产生的生成器-> 0001, 0101, 0011, 0111,
我已经迭代地解决了这个问题,但需要能够递归地解决它。解决此类问题的最佳方法是什么?在像这样的复杂问题中(嗯,对我来说很复杂!),我如何识别基本情况和递归情况?
下面是我的迭代解决方案:
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()
【问题讨论】:
-
为什么需要递归?
-
这是一个递归问题。我首先迭代地解决了它,因为我认为我能够更容易地识别递归解决方案(我错了——现在我被难住了!)。
-
可以使用模块函数吗?
-
我宁愿不这样做,这样我才能真正开始从概念上和实践上掌握这类问题。
标签: python recursion iteration generator