Можете обьяснить как работает эта функция(perm)

#include <stdio.h>
#define SWAP(a,b) {int temp = a; a = b; b = temp;}
#define N 10

void perm(char str[],int count,int t)
{
    if (t==count-1){ 
        for (int i=0;i<count;++i)
            printf("%c",str[i]);
        printf("\n");
    }
    else{
        for (int j=t;j<count;++j){
            SWAP(str[t],str[j]); 
            t++;
            perm(str,count,t); 
            t--;
            SWAP(str[t],str[j]);
        }
    }
}

int main()
{
    int t=0;
    char str[N]="";
    int count=0;
    printf("Enter a number:\n");
    gets(str);
    while(str[count]){
        count++;
    }
    printf("res:\n");
    perm(str,count,t);
    return 0;
}

Ответы (1 шт):

Автор решения: DmitryK

Эта функция рекурсивно выдает все варианты перестановки символов в строке. Аналог std::next_permutation(). Если введете 012, то получите

res:
012
021
102
120
210
201

Вот только макросами пользоваться - не самый лучший вариант. Можно наступить на грабли.

// вместо 
#define N 10
// лучше использовать
const int N = 10;

А вместо макроса #define SWAP(a,b) {int temp = a; a = b; b = temp;} лучше использовать функцию.

→ Ссылка