ich eine rekursive Funktion gefunden, die mich ein wenig überrascht, diese Funktion verlassen zählt alle negativen Zahlen, die in einer Reihe erscheinen:merkwürdige Ausdruck in der return-Anweisung
int count_negative(int arr[], int n)
{
if (n > 0)
return (*arr < 0) + count_negative(++arr, n - 1);
return 0;
}
Kann jemand diese Linie erklären:
return (*arr < 0) + count_negative(++arr, n-1);
Danke
Dies ist eine ziemlich schlechte Implementierung der Rekursion; Es kann nicht in einen Tail-Call konvertiert werden, so dass die Leistung im Vergleich zu einer iterativen Implementierung leidet. – cdhowie
Ist das nicht '(* arr ...) + count_negative (++ arr, ...' provozieren UB? – alk
@cdhowie: GCC scheint zu TCO es ist in Ordnung. – ninjalj