Я отслеживаю код некоторых практических задач для курса Java для начинающих, который я прохожу. Ниже приведен один пример из полученного мной практического задания:
Код: Выделить всё
public void printStr(String s){
if (s.length() < 6){
System.out.println(s);
printStr(s + "#");
}
}
Когда я отслеживаю код вызова метода printStr("csp"), я получаю следующую трассировку стека:
Кадр стека 1: pS("csp") // печатает csp и затем вызывает printStr с csp# в качестве параметра
SF2: pS("csp#")
SF3: pS("csp##")
в этот момент... что? Достигнут ли базовый случай (длина String s не менее 6)?
Итак... что происходит дальше? Оператора возврата нет. Консоль показывает
В частности, не должен ли метод затем пройти через все вызовы «над ним»? Я думаю, что этот метод «пробегает обратно» через все кадры стека, но больше ничего не происходит... почему? Это потому, что длина String равна 6? Что еще было бы, если бы не это? Является ли условие, использованное в приведенном выше примере, способом достижения базового случая без использования структуры if/else? Все просто вывозится мусором (если я понимаю этот термин)?