Transformationen für Tail-Calls

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;
  }
}
Aufgabe: werden genau die gleichen Rechnungen ausgeführt? (Nein.)



Johannes Waldmann 2006-02-02