Rubí: método recursivo

def reverse_append(arr, n)  
    return arr if n < 0 
    reverse_append(arr, n-1)
    arr << n
    arr
end 

reverse_append([],4) #=> [0, 1, 2, 3, 4]

Parece que no puedo entender este método recursivo. Produce una matriz de 0 a n.

¿Alguien puede explicarme esto?