średnia rekurencyjnie

0

jak rekurencyjnie obliczyć średnia? mam iteracyjnie

double srednia(double tab[], int n)
{
    double temp = 0;
    for (int i =0; i<n; i++)
        temp = temp + tab[i];

    temp = temp / n;
    return temp;
}

pomoże ktoś zrobić to rekurencyjnie?

0

Licz średnią średnich.

0

nie da sie..

0

coś takiego?

double srednia(double tab[], int n)
{
    static int i = 0;
    static double temp = 0;
    temp = temp + tab[i];

    i++;
    if (i<n)
        temp = srednia(tab, n);
    else

    temp = temp / n;
    return temp;
}
3

Nie lol. Podziel tablicę na pół, policz średnią obu połówek i potem średnią tych średnich. Postępuj tak aż do 1 elementu i wtedy zwróć go jako średnią.

1

Można, avg(a1,...,an+1) = avg(a1,...,an)*n/(n+1) + an+1/(n+1)

0

Kiedyś coś takiego napisane miałem. left i right to wskaźniki na pierwszy i ostatni element tablicy która ma zostać posortowana. Pewnie tragicznie ale wrzucam.

 
double srednia (int* left, int *right) 
{
    if(left>right) //sprawdzenie czy użytkownik na pewno podał dobre końce
    swap(left,right);
    if (left>right) return 0; // zwracamy 0 
    return (srednia(left,right-1)*(right-left) + (*right))/(right-left+1); //wywołujemy funkcje rekurencyjnie 
}
0

Robisz błąd próbując zmusić funkcja średnia do bycia rekurencyjną. Owszem to, że użyłeś iteracje w kontekście dodawania oznacza, że możesz rekurencyjnie zakodować dodawanie i następnie użyć w definicji średniej. Spójrz na ten poniższy kod:

def avg(xs):
    return 1.0 * sum(xs) / len(xs)

print avg([1, 2])

Tutaj funkcja sum może być zakodowana zarówno iteracyjnie jak i rekurencyjnie. Natomiast funkcja średnia niezależnie od podejścia ma tę samą definicję. Toteż upomnę, że nie należy bezrozumnie używać mechanizmów na siłę, inaczej tylko sobie zaszkodzisz :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1