Agreed. Erlang is another language with single assignment, i.e. every variable assignment target must have a new name. It's incredibly easy to see what calculations and conditions affect the final outcome.
Here is an example of using a recursive function in Erlang to sum up a factorial.
fac(1) ->
1;
fac(N) ->
N * fac(N - 1).