2016-10-29 2 views
-1

Here - код игры Go для этой проблемы.golang - перестановка строк - пределы среза вне диапазона

Я пытаюсь написать перестановку строк 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++ { 
        ^^^ 
        ? 

Заменить n на i, который должен идти от 0 к n-1.

Resulting playground.

+0

Ahhh Не могу поверить, что я пропустил это! Спасибо, я был настолько сосредоточен на рекурсии, потому что это то, что компилятор мне рассказывал ... –

Смежные вопросы