2016-10-29 15 views
-1

Hereは、この問題のGo Playgroundコードです。golang - 文字列置換 - スライス境界が範囲外にある

再帰を使用してゴラン文字列置換を作成しようとしています。
置換関数は、空文字列("")とstr( "abc")の2つの引数をとります。コードは次のとおりです

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]) 
     } 
    } 
} 

このコードを実行すると、期待通りに3,2,1,0が表示されます。
abc」が正常に取得されましたが、「panic: runtime error: slice bounds out of range」というエラーが表示されます。

2番目の3,2,1,0を表示しないので、bの組み合わせにも達しません。エラーが発生するのは、文字列のc部分に到達するときですが、b部分にも届かないため、何が間違っているかわかりません。

+0

注:書式設定されたコードを使用してください(プレイグラウンドページの「フォーマット」ボタンを参照してください) – VonC

答えて

1

シンプル:

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

0からn-1に行くことになっているiによってnを交換してください。

Resulting playground

+0

ああ、私はそれを逃したとは思わない!ありがとう、コンパイラが私に言っていたので、私は再帰線に非常に集中していました... –

関連する問題