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?
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?
Licz średnią średnich.
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;
}
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ą.
Można, avg(a1,...,an+1) = avg(a1,...,an)*n/(n+1) + an+1/(n+1)
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
}
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 :)