微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将结果存储在递归函数中,我的方法甚至可以工作吗?

如何解决如何将结果存储在递归函数中,我的方法甚至可以工作吗?

我第一次尝试编写列出字符串字符所有排列的递归函数

如果我将列表设置为空,然后将结果添加到该列表中,则发现每次调用函数时该列表都会重置为空。

我知道我现在所拥有的也是错误的,因为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 举报,一经查实,本站将立刻删除。