私は再帰を理解しようと、私はそれが後戻りする方法のまわりで私の頭を取得するように見えることはできませんので、標準の文字列置換アルゴリズム(swap --> permute --> swap)
挿入「n」のprintf文のタブ
とバックトラック、文字と並べ替えるを入れ替えています、私はインクリメントのインデント "レベル"ですべての再帰的なpermute()コールでprintfsを挿入しようとしました。とにかく、ここでコードは次のとおりです。
void permute(char arr[], int L, int R, int level)
{
int i = 0;
level = level+1;
if(L == R)
{
printf("%*s", level, "\t");
printf("printing : %s\n", arr);
}
else
{
for(i = L; i <= R; i++)
{
printf("%*s", level, "\t");
printf("swapping %c with %c\n", arr[L], arr[i]);
SWAP(&arr[L], &arr[i]);
permute(arr, L+1, R, level);
printf("%*s", level, "\t");
printf("swapping back %c with %c\n", arr[i], arr[L]);
SWAP(&arr[L], &arr[i]);
}
}
}
int main()
{
char str[] = "abc";
permute(str, 0, 2, 0);
return 0;
}
私が欲しい私たちはより深い再帰のレベルに行くように、タブをインクリメント置くことprintf("%*s", level, "\t");
です。しかし、それは動作していないと私は1つのタブでシフトされたテキストのブロックを取得しています。
swapping a with a
swapping b with b
printing : abc
swapping back b with b
swapping b with c
printing : acb
swapping back b with c
swapping back a with a
swapping a with b
swapping a with a
printing : bac
swapping back a with a
swapping a with c
printing : bca
swapping back a with c
swapping back a with b
swapping a with c
swapping b with b
printing : cba
swapping back b with b
swapping b with a
printing : cab
swapping back b with a
swapping back a with c
printfを(level * '\t')
のタブに挿入する方法はありますか?
ありがとうございます。 'indent()'は正常に動作しているようです。 – tcpip