Jak napisać rekurencyjną funkcję do sumy ciągu?

0

Mam dany ciąg: S(n) = 1 + 3 + 5 + 7 + ... + (2n − 1).

Iteracyjnie liczę n-ty wyraz tak:

int suma = 0, i;
    for(i=0; i<2*n-1; i++)
        suma += (2*i+1);
    return suma;

ale z rekurencją mam problem:

int i, suma = 0;
        for(i=1; i<2*n-1; i++)
            suma += funkcja(2*i+1);
        return suma;

Tzn. to jest moja rekurencyjna funkcja:

if(n == 1)
        return 1;
    else
    {
        int i, suma = 0;
        for(i=1; i<2*n-1; i++)
            suma += funkcja(2*i+1);
        return suma;
    }
1

Rekurencja nie wymaga iteracji.

Przepisz wzór do takiej formy, która ma przypisaną wartość dla A(1) a A(n) jest wyliczane na podstawie A(n-1).

0

A(1) = 1
A(n) = A(n/2-2)

?

0

A(1) = 1
A(2) = 1 + 3
A(3) = 1 + 3 + 5
A(4) = 1 + 3 + 5 + 7
Jak łatwo zauważyć:
A(2) = A(2-1) + (22-1)
A(3) = A(3-1) + (2
3-1)
A(4) = A(4-1) + (2*4-1)
...
Więc A(n) to...?

0

Właśnie widzę, że nie, ale nie bardzo mam pomysł, jak z tego zrobić sumę?

A(1) = 1
A(n) = A(n-1) + A(2*n-1)

?

A(1) = 1

A(n) = A(n-1) + (2*n-1)

0
techit napisał(a):

A(n) = A(n-1) + (2*n-1)
Tak, teraz zamień to na kod.

0

dzięki:) kod już napisałem, ale widzę, że teraz moja iteracja jest źle ^^'

0

czy teraz iteracja powinna tak wyglądać?

int suma = 0, i;
    for(i=1; i<=2*n-1; i++)
        suma += (2*i-1);
    return suma;

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