permutation recursive code example

Example 1: generate all permutations of string

void perm(char a[], int level){

    static int flag[10] = {0};
    static char res[10];
    // If we are the last character of the input string 
    if(a[level] == '\0'){
        // First we assign stopping point to result
        res[level] = '\0';
        // Now we print everything
        for(int i = 0; res[i] != '\0'; ++i){
            printf("%c", res[i]);
        }
        printf("\n");
        ++counter;
    }
    else{
        // Scan the original string and flag to see what letters are available
        for(int i = 0; a[i] != '\0'; ++i){
            if(flag[i] == 0){
                res[level] = a[i];
                flag[i] = 1;
                perm(a, level + 1);
                flag[i] = 0;
            }
        }
    }
}

int main(){
    char first[] = "abc";
    perm(first, 0);
    return 0;
}

Example 2: recursive permutation

function findPerms(str) {  
      if (str.length === 1) return [str]    
      let all = []  
      
      for (let i = 0; i < str.length; i++) {    
        const currentLetter = str[i]    
        const remainingLetters = str.slice(0,i) + str.slice(i+1) 
        const permsOfRemainingLetters = findPerms(remainingLetters)
        
        permsOfRemainingLetters.forEach(
          subPerm => {all.push(currentLetter + subPerm)}
        )    
      }  
      return all
    }