【发布时间】:2019-06-15 19:03:41
【问题描述】:
我正在练习解决递归和回溯练习。 我遇到了打印列表列表的所有笛卡尔积的问题,其中每个子列表仅包含不同的字符。当然,如果任何一个子列表为空 - 最终产品就是一个空列表。
我立即想到递归\回溯解决它。 我不擅长递归——人们给我的建议是: 将递归视为一个黑盒,只考虑一些适当的基本情况,并归纳假设您得到了 n-1 的答案,然后进行递归步骤。
所以这就是我的想法, “基本情况是什么?”当列表列表为空时 - 我将打印一个空列表。 如果不是,则返回第一个子列表的第一个字符,以及从下一个子列表对列表列表的递归调用。
def cartesian_product(lst):
if len(lst)==0:
return []
for c in cartesian_product(lst[1:]):
for s in c:
return [lst[0][0]] + [s]
我想这里的问题是因为我不保存当前的子列表,我总是在第一个子列表中。 但是,有一个“NoneType”错误,我不知道为什么。
我如何知道何时需要函数助手?我什么时候可以按照人们告诉我的方式解决它?
【问题讨论】:
-
也许你在同一个班? stackoverflow.com/a/54302988/633183
-
@user633183 哈哈。我不这么认为...我正在努力提高我的递归解决问题的能力,但不知道如何
标签: python python-3.x recursion backtracking