3 svar
381 visningar
segway 33 – Fd. Medlem
Postad: 5 nov 2018 10:03

Returvärde vid arrayfunktioner

Hej, behöver lite tips om hur man ska tänka vid dessa funktioner;

Arr, som används vid anropet till arrayFunc, är deklarerad på följande vis:
int arr[] = {1,4,2,7,9,3};

Vad kommer då returneras vid nedan anrop?

arrayFunc (6, arr, 2);

Jag tänker att villkorern if- och else if-satserna är ej uppfyllda, därför är det
return array[0] - arrayFunc(nrOfElements - 1, &array[1], val); 
som gäller. Men hur kan detta bli 8 som return value? 

Laguna Online 30472
Postad: 5 nov 2018 11:40

arrayFunc anropar ju sig själv, så du får ta reda på vad det nya anropet returnerar. Osv. i sex steg.

segway 33 – Fd. Medlem
Postad: 5 nov 2018 15:13

Så när första steget slutförts så kommer arrayen bli en element mindre? 

int arr[] = {4,2,7,9,3}; och därefter "börjar man om från början" tills det bara finns ett element kvar?

Laguna Online 30472
Postad: 5 nov 2018 15:30

Själva arr blir inte mindre, men det man skickar i de rekursiva anropen till arrayFunc pekar ut mindre och mindre delar.

Ska du göra något särskilt med funktionen?

Ofta ska man tänka så att ett anrop till en rekursiv funktion utför en viss uppgift, som är lätt att formulera, och sen ser man att den utför den uppgiften genom att dela upp den i mindre delar och lösa dem genom att anropa sig själv. Men den här funktionen tycker jag inte har nån vettig beskrivning, utan den är väl bara till för att träna på rekursion. En sak som gör den enkel är att den inte grenar ut sig, utan bara anropar sig själv en gång i taget.

Den ändrar inget i arrayen och bryr sig bara om elementen, inte pekarvärdena, så man kan skriva ner rätt enkelt vad den gör:

 

f({1,4,2,7,9,3}, 2) = 1 - f({4,2,7,9,3}, 2)

f({4,2,7,9,3}, 2) = f({2,7,9,3}, 2+4) = f({7,9,3}, 6+2) = 7 - f({9,3}, 8)

f({9,3}, 8) = 9 - f({3}, 8)

f({3}, 8) = 3 - f({}, 8) = 3 - 8 = -5

och sen tillbaks upp och utför alla subtraktioner.

Svara
Close