2012-03-24 8 views
0

私は、0から9の整数のすべての順列を再帰的に計算することが要件の一部である宿題を割り当てています。教授は実際に質問のこの部分。私は割り当ての残りの部分を終えましたが、私はpermute関数を働かせることができません...私は割り当て情報に示されたのとまったく同じように実装しています。しかし、私がそれを実行すると、各順列は何度も繰り返されます(正しい順列をすべて取っているかどうかはわかりません)。C++:再帰的に0から9までの数字のすべての順列

私は割り当ての指示に間違いを犯したと思います。私はこれを数時間働いていて、どこが間違っているのか分からないようです。誰かが正しい方向に私を指すのに役立つことができますか?

ここでは、現在のコードです:

void permute(int v[], int curr) { 
    for (int i = curr; i < MAX; i++) { 
     swap(v[i], v[curr]); 
     permute(v, curr + 1); 
     swap(v[curr], v[i]); 
    } 
} 

EDIT:実際には、右これを投稿した後、私は右、それはスワップに関係している実現は?今は私とカーが同じなので、私は同じ数字を交換しています。それはスワップ(v [i]、v [curr + 1])でなければなりませんか?

+1

特に問題は何ですか?あなたは 'if(curr == MAX)// print array 'を追加したいかもしれません。 – amit

+0

amit:私はそれが実際に助けたと思います。チェックするためにprintステートメントを含めていましたが、MAXに達する前であることに気付きました。私はそれが私が混乱しているところだと思う。 if(cur == max)を使って試してみて、私が得たものを見てみましょう。 – Nate

+0

これまでのところコードは正常に見えます。現在の形式で動作するはずです。あなたはあまりにも頻繁に印刷しますか? 'curr == MAX'の場合にのみ出力してください。 – Howard

答えて

1

の答えとして[OPの問題を解決するようです]私のコメントをラッピング:

(1)あなたが最大に達したとき、あなたはあなたのアレイを印刷したい場合があります:

if (curr == MAX) //print array 

(2)あなたがあなたが得る置換の数を数えたければ、static int [またはグローバル変数、または余分なパラメータint& count]をつけることでそれを行うことができます。curr == MAX [印刷と一緒に]を増やすごとにそれを増やしてください。

関連する問題