2016-10-29 8 views
-1

Here은이 문제의 이동 코드입니다.골란 - 문자열 순열 - 슬라이스 범위가 범위를 벗어남

재귀를 사용하여 golang 문자열 순열을 쓰려고합니다.
순열 함수는 두 개의 인수를 취합니다. 접두어는 빈 문자열 ("")이고 str은 "abc"입니다. 코드는 아래와 같습니다

func main() { 
    str := "abc" 
    perm("", str) 
} 

func perm(prefix string, str string) { 
    n := len(str) 
    fmt.Println(n) 
    if n == 0 { 
     fmt.Println(prefix) 
    } else { 
     for i := 0; i < n; n++ { 
      perm(prefix+str[i:i+1], str[0:i]+str[(i+1):n]) 
     } 
    } 
} 

이 코드를 실행하면 예상대로 n 값 3,2,1,0이 표시됩니다.
성공적으로 "abc"이 표시되지만 "panic: runtime error: slice bounds out of range"오류가 발생합니다.

두 번째 라운드가 3,2,1,0에 표시되지 않으므로 b 조합까지 표시되지 않습니다. 오류가 발생하는 경우 문자열의 c 부분에 도달하지만 심지어 b 부분까지 도달하지 않았기 때문에 잘못된 것이 무엇인지 확신 할 수없는 것 같습니다.

+0

참고 : 항상 형식이 지정된 코드를 사용하십시오 (놀이터 페이지의 "포맷"버튼 참조). – VonC

답변

1

간단한 :

for i := 0; i < n; n++ { 
        ^^^ 
        ? 

0에서 n-1로 이동하도록되어 i에 의해 n를 교체합니다.

Resulting playground.

+0

아, 그 것을 놓쳤다는 것을 믿을 수 없습니다! 고맙습니다. 컴파일러가 내게 말했던 것 때문에 재귀 라인에 너무 집중했습니다. –