如何解决如何将结果存储在递归函数中,我的方法甚至可以工作吗?
我第一次尝试编写列出字符串字符所有排列的递归函数。
如果我将列表设置为空,然后将结果添加到该列表中,则发现每次调用该函数时该列表都会重置为空。
我知道我现在所拥有的也是错误的,因为for循环将被return语句破坏。但这就是我的问题所在,如何保存结果(即每个单独的排列)而又不会在每次调用时将列表重置为空?我不允许使用全局变量,这是来自MIT开放课件类的练习。
还想知道我的方法是否还能工作?不知道我如何将字符串切成薄片。
谁能阐明我如何列出函数中所有排列的清单?甚至我的方法还有工作的机会?
def get_permutations(sequence):
if len(sequence) == 1:
return sequence
else:
return (sequence[i] + get_permutations(sequence[0:i-1] + sequence[i +
1 : len(sequence)]) for i in range(len(sequence)))
现在的输出是
<generator object get_permutations.<locals>.<genexpr> at 0x102b3b9d0>
解决方法
return
不能超过一次!您想要构建一个列表并返回该列表,而不是从循环内部返回每个值。看起来像这样:
def get_permutations(sequence):
if len(sequence) == 1:
# base case
return sequence
# Each recursive call needs to be on a subset of sequence so it gets
# smaller each time and eventually reaches the base case...
return [
sequence[i] + get_permutations(sequence[0:i-1] + sequence[i+1:len(sequence)])
for i in range(len(sequence))
]
在如何简化为基本情况以及如何构建列表方面,这里仍然存在一些错误,但是希望这可以使您指明正确的方向!
,由于该函数应该返回一个排列列表,因此您应在列表推导中使用嵌套的for
子句来遍历递归调用的返回列表,以将其追加到索引{{ 1}}。同样,在基本情况下,该函数还应该返回一个字符串字符列表,即使它只是一个字符的列表:
i
这样:
def get_permutations(sequence):
if len(sequence) == 1:
return [sequence]
return [
sequence[i] + s
for i in range(len(sequence))
for s in get_permutations(sequence[:i] + sequence[i + 1:])
]
返回:
get_permutations('abc')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。