Funkcja rekurencyjna [problem]

0

Witam. Mam problem z zapisaniem funkcji w postaci rekurencyjnej

     C[0]=0;S[0]=0;S[1]=r[1];
    C[1]=S[1]+p[1];
    C[2]=max(C[1],r[2])+p[2];
    C[3]=max(C[2],r[3])+p[3];
    C[4]=max(C[3],r[4])+p[4];
    C[5]=max(C[4],r[5])+p[5];
    C[6]=max(C[5],r[6])+p[6];
    C[7]=max(C[6],r[7])+p[7];
    C[8]=max(C[7],r[8])+p[8];
    C[9]=max(C[8],r[9])+p[9];
    C[10]=max(C[9],r[10])+p[10];
    C[11]=max(C[10],r[11])+p[11];

O to moja próba

 int licz_wynik(int C[], int p[], int r[],int rozmiar)
{
    if (rozmiar==0)
        return 0;
    if (rozmiar==1)
        {
        C[rozmiar]=r[1]+p[1];
        return C[rozmiar];
        }

    return C[rozmiar]=max(licz_wynik(C[rozmiar-1],r[rozmiar]))+p[rozmiar];
}

Zwracany błąd:

C:\Users\Janusz\Desktop\alg_jacksona\main.cpp||In function 'int licz_wynik(int*, int*, int*, int)':|
C:\Users\Janusz\Desktop\alg_jacksona\main.cpp|27|error: invalid conversion from 'int' to 'int*' [-fpermissive]|
C:\Users\Janusz\Desktop\alg_jacksona\main.cpp|27|error: invalid conversion from 'int' to 'int*' [-fpermissive]|
C:\Users\Janusz\Desktop\alg_jacksona\main.cpp|27|error: too few arguments to function 'int licz_wynik(int*, int*, int*, int)'|
C:\Users\Janusz\Desktop\alg_jacksona\main.cpp|17|note: declared here|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

Domyślam się, że problem ma związek ze wskaźnikami. Ale nie wiem jak go rozwiązać. Dodatkowo nie jestem pewien czy w ogóle moja próba przekształcenia jest poprawna. Chciałbym aby algorytm zwracał mi wartość z C[rozmiar]. Z góry dziękuję za pomoc.

3

Skoro przekazujesz 2 argumenty do funkcji która oczekuje 4, nie spodziewaj się że będzie działać.

0

Nie rozumiem. Przekazuje 4 argumenty:

int C[], int p[], int r[],int rozmiar

Trzy tablice i rozmiar.
C[] jest pustą tablicą, więc nie wiem czy w ogóle powinienem ją przekazywać, czy zadeklarować w funkcji, skoro na wyjściu chcę tylko c[rozmiar]
Generalnie jest to próba napisania algorytmu Jacksona do szeregowania zadań. Przekazuje już posegregowane tablice p[] i r[], posegregowane względem r

3

licz_wynik(C[rozmiar-1],r[rozmiar]) Tu są dwa, nie cztery.

2

@PseudoNaukowiec: O RLY? Pokaż mi tutaj:
return C[rozmiar]=max(licz_wynik(C[rozmiar-1],r[rozmiar]))+p[rozmiar];
4 argumenty dla funkcji licz_wynik. I dare you. Ja widze C[rozmiar-1] i r[rozmiar]. Matematykiem nie jestem ale 2 < 4.

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