Точнее для понимания:
Объявлен метод Cube(a) который возвращает Куб числа (a).
Соответственно вызов формата Cube(Cube(a)) Выполняется в следующем порядке (например для 3):
Первый вызов Cube(Cube(3)) смотрит внутрь аргумента и видит там не готовое значение а вызов метода
Происходит вызов Cube(3), который возвращает 3^3=27 в вызывающий метод Cube(Cube(3)).
Значение 27^3 возвращается в вызываемый метод ( Cube(27) )
Результат выполнения (19683) будет возвращен в вызывающий метод main.
итого 3^9 = 3^3^3 = 19683