Por que a complexidade temporal da função de permutação é O (n!)

Considere o seguinte código.

public class Permutations {
    static int count=0;
    static void permutations(String str, String prefix){
        if(str.length()==0){
            System.out.println(prefix);
        }
        else{
            for(int i=0;i<str.length();i++){
                count++;
                String rem = str.substring(0,i) + str.substring(i+1);
                permutations(rem, prefix+str.charAt(i));
            }
        }

    }
    public static void main(String[] args) {
        permutations("abc", "");
        System.out.println(count);
    }

}

aqui a lógica que eu acho que é seguida é: ela considera cada caractere da string como um prefixo possível e permite os caracteres n-1 restantes.
portanto, por essa relação de recorrência lógica acaba sendo

T(n) = n( c1 + T(n-1) )          // ignoring the print time

que é obviamente O (n!). mas quando usei uma variável count para ver quando algo realmente cresce na ordem de n !, encontrei resultados diferentes.
para string de 2 comprimentos para count ++ (dentro do loop) é executado 4 vezes, para string de 3 comprimentos o valor de count vem 15 e para strings de 4 e 5 comprimentos são 64 e 325.
Isso significa que cresce pior que n !. então por que se diz que isso (e algos semelhantes que geram permuatações) são O (n!) em termos de tempo de execução.

questionAnswers(2)

yourAnswerToTheQuestion