Поэтому мне было любопытно, смогу ли я реализовать ограничение рекурсии для Java, и обнаружил этот код по ссылке: Установить максимальную глубину рекурсии в java
Какое число выполняет getStackTrace ().длина начала отсчета?0 или 1?С какого числа начинается «стек»?0 или 1?
public class RecursionLimiter {
public static int maxLevel = 10;
public static void emerge() {
if (maxLevel == 0)
return;
try {
throw new IllegalStateException("Too deep, emerging");
} catch (IllegalStateException e) {
if (e.getStackTrace().length > maxLevel + 1)
throw e;
}
}
}
public class RecursionLimiter {
public static int maxLevel = 10;
public static void emerge() {
if (maxLevel == 0)
return;
try {
throw new IllegalStateException("Too deep, emerging");
} catch (IllegalStateException e) {
if (e.getStackTrace().length > maxLevel) {
System.out.println(e.getStackTrace().length);
throw e;
}
}
}
}
public static void main(String[] args) {
// TODO code application logic here
printRecursively(8);
}
public static void printRecursively(int n) {
RecursionLimiter.emerge();
if (n == 1) {
System.out.println(1);
return;
}
System.out.println(n);
printRecursively(n-1);
}
Я использовал два вышеупомянутых класса, и кажется, что он перестает работать в printRecursively (9) [in main ()];что означает, что стек уже достиг 10 с тех пор, как сгенерировано исключение.
Что происходит в фоновом режиме?Запустив printRecursively () ["first iteration"], он будет добавлен в стек?Даже тогда не должно ли printRecursively (9) использовать только 9 «уровней стека»?