たらいまわし関数

「たらいまわし関数」でググると、「遅延評価の言語だと速い」ということはわかるけど、関数自体が何を返すのかがわからない…
どなかたご存知の方があれば教えてください。


function tarai(x, y, z) {
return (x <= y) ? y : tarai(tarai(x - 1, y, z), tarai(y - 1, z, x), tarai(z - 1, x, y));
}

print(tarai(1, 2, 3));