Second Print ведет обратный отсчет, потому что для каждого вызова, который вы делаете kaboom (i + 1), этот вызов помещается на вершину стека вызовов. Как только я> = 3, стек перестает расти, и вызовы отбрасываются с того места, где они прекратились. Итак, 3 печатается, и выполнение kaboom (2 + 1) заканчивается. Затем вызов kaboom (1 + 1) возобновляется с того места, на котором он остановился, и печатает 2 и завершается. Наконец, kaboom (1) возобновляет и печатает 1.