Я пытаюсь понять рекурсию и возвраты со стандартной строкой перестановки алгоритмом (swap --> permute --> swap)
Установка «п» вкладка в PRINTF заявлении
Так как я не могу получить мою голову вокруг того, как он откатывается, меняет местами символы и переставляет , Я попытался вставить printfs при каждом вызове recursive permute() с добавлением «уровней» отступов. Во всяком случае вот код:
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");
поставить Инкрементирование вкладки, как мы идем в более глубокие рекурсивных уровней. Но это не работает, и я получаю блок текста, сдвинутый на одну вкладку.
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