Python: 재귀 알고리즘을 생성기로 사용

| | | | | | | | | | | |

최근에 저는 사소한 제약이 있는 특정 시퀀스를 생성하는 함수를 작성했습니다. 문제는 자연 재귀 솔루션에서 발생했습니다. 이제 비교적 작은 입력의 경우에도 시퀀스가 수천 개이므로 모든 시퀀스로 목록을 채우는 데 사용하는 대신 내 알고리즘을 생성기로 사용하는 것을 선호합니다.

여기가 있습니다. 예. 재귀 함수를 사용하여 문자열의 모든 순열을 계산한다고 가정합니다. 다음의 순진한 알고리즘은 추가 인수 "storage"를 취하고 찾을 때마다 순열을 추가합니다.

def getPermutations(string, storage, prefix=""): if len(string) == 1: storage.append(prefix + string) # <----- else: for i in range(len(string)): getPermutations(string[:i]+string[i+1:], storage , 접두사+문자열[i]) storage = [] getPermutations("abcd", storage) for permutation in storage: print permutation 

(비효율성에 대해서는 신경쓰지 마십시오. 이것은 단지 예)

이제 내 함수를 생성기로 바꾸고 싶습니다. 즉, 저장소 목록에 추가하는 대신 순열을 생성하기 위해:

def getPermutations(string , prefix=""): if len(string) == 1: yield prefix + string # <----- else: for i in range(len(string)): getPermutations(string[:i]+string [i+1:], 접두사+문자열[i]) in getPermutations("abcd"): 인쇄 순열 

이 코드는 작동하지 않습니다( 함수는 em처럼 작동합니다. pty 생성기).

제가 누락된 것이 있습니까? 위의 재귀 알고리즘을 반복 알고리즘으로 교체하지 않고 생성기로 바꾸는 방법이 있습니까?