>>488
してくれない。ただRelaseHoldで計算を続けられる。
定義の時にHold関係で評価順序をいじってなんとかすることもできる。

(* Good *)
f[x_, s_] := If[x == 0, s, f[x - 1, s + x]]
f[1000, 0]

(* Good *)
id[x_] := x; SetAttributes[id, HoldAll]
g[x_, s_] := id[If[x == 0, s, g[x - 1, s + x]]]
g[1000, 0]

(* Bad *)
ClearAttributes[id, HoldAll]
g[1000, 0]