die linke Funktion ist nicht tail-rekursiv, aber die rechte.
int sum (int x) { if (x > 0) { return sum (x-1) + x*x; } else { return 0; } } |
int sum_trick (int x) { return sum_helper (x, 0); } int sum_helper (int x, int accu) { if (x > 0) { return sum_helper (x-1, accu + x*x); } else { return accu; } } |