Ответ в том, что строка становится короче.
Я предполагаю, что следующая программа без System.out
void perm(String str, String prefix){
if(str.length() == 0){
} else{
for(int i = 0; i < str.length(); i++){
String rem = str.substring(0, i) +
str.substring(i + 1);
perm(rem, prefix + str.charAt(i));
}
}
}
Предположим, строка содержит ноль символов. Тогда как среда выполнения - это оператор if, который равен O(1) = O(c)
.
. Для строки длиной n
он злоупотребляет нотацией O(c1+n*c2*O(n-1))
, чтобы проиллюстрировать рекурсию, где c2
- время выполнения для подстроки. Следовательно, время выполнения - O(n!) = O(n*n!)
, что, кстати. O(n^n)
как O(n!) = O(n^n)
. Однако, вероятно, есть разница в маленьких обозначениях.