Вы всегда можете попробовать записать каждый шаг, чтобы понять результат. Это должно быть
Unless I made a mistake somewhere.
Explanation:
Each step here represents a new стек вызовов кадр.
На шагах 1, 2, 3 условие в строке 4 истинно, поэтому код печатает значение на строка 5 и выполняет рекурсивный вызов. Пока что на консоль выведено 1..2..3 ...
На шаге 4, однако условие ложно. Поскольку 4 - это голова, следующий элемент равен 5, а 5 не имеет следующего элемента. Теперь помните, как я сказал ранее, каждый шаг здесь - это новый кадр стека. Итак, на шаге 4 мы находимся в стековом фрейме 4. Если предложение ложно, мы go до строки 7. Заголовок равен 4, поэтому мы выводим 4 в консоль и выходим из текущего кадра.
Теперь мы вернулись в кадр 3 в строке 6. Мы переходим к строке 7, заголовок равен 3, поэтому мы печатаем 3 и выходим из текущего кадра. И так до тех пор, пока не выйдем из кадра 1.
Вот откуда эти 4..3..2..1 .. пришли. Они были напечатаны в строке 7.
Стопка на каждом шаге: введите описание изображения здесь