【发布时间】:2022-01-01 11:51:08
【问题描述】:
我试图理解下面函数的算法,但没有什么能帮助我理解这个算法,甚至使用这个https://pythontutor.com/visualize.html进行深度调试。我应该注意到我肯定了解迭代器和生成器,但这让我感到困惑。
请解释一下它是如何工作的。
代码:
def permute(seq):
"""
This function returns all the possible unique mixes of symbols in sequence
Example with "xyz" string:
xyz, xzy, zxy, zyx, yxz, yzx
:param seq: any sequence
"""
if not seq:
yield seq
else:
for i in range(len(seq)):
rest = seq[:i] + seq[i + 1:]
for x in permute(rest):
yield seq[i:i + 1] + x
string1 = "hard"
print(*(permute(string1))) # hard hadr hrad hrda hdar hdra ahrd ahdr arhd ardh adhr adrh rhad rhda rahd radh rdha rdah dhar dhra dahr darh drha drah
【问题讨论】:
-
到目前为止你对它的理解是什么?
-
我流畅地使用生成器和迭代器。但是通过递归它绞尽脑汁(递归总是如此)。如果你问的是这段代码,我什么也不能告诉你……
-
如果您甚至难以开始理解,开始查看递归函数的最佳方法之一是从“基本情况”开始并进行处理 - 当
permute是用空字符串调用?当使用长度为 1 的字符串调用它时会发生什么?等等等等
标签: python recursion generator