"Co zostanie wypisane na ekranie" - czyli problem z odczytaniem funkcji i wskaźników w języku C

0

Zadanie 6: Dana jest tablica: int tab[] = {2, 4, 6, 8}; . Co zostanie wypisane na ekranie po wywołaniu: Funkcja(13, tab); ?

void Funkcja(int a, const int* b)
{
    if (!a) {
        printf(”% d ”, b[0]);
        return;
    }
    int* c = b;
    if (a % 4 == 0) {
        printf(”% d % d ”, b[0], b[1]);
        c += 2;
    }
    Funkcja(a / 2, c);
    Printf(”% d ”, b[a % 4]);
}

Zadanie 7 : Co zostanie wypisane na ekranie w wyniku wywołania F(13) ?

void F(int n)
{
    if (n > 10) {
        F(n - 10);
        return;
    }
    if (n < 0) {
        printf(”A ”);
        return;
    }
    printf(”% d ”, n);
    F(n - 1);
    printf(”% d ”, n + 1);
}

Odpowiedzi:
Zadanie 6:
3 2 1 0 A 1 2 3 4
Zadanie 7:
2 4 8 6 4
Odpowiedź uzyskałem z "wklepania kodu". Jednak mój tok rozumowania zaciął się przy zadaniu 6 oraz przy zadaniu 7 w miejscu kiedy dochodzimy do wyświetlenia litery 'A'. Proszę o pomoc.

1

W obu przypadkach masz rekurencję czyli funkcja wywołuje samą siebie tak prosto mówiąc. Najlepiej by było jakbyś odpalił sobie debugera i przeleciał po tym kodzie krok po kroku i byś widział co się dzieje. Ogólnie to chodzi o to, że jak napotka linijkę gdzie jest nowe wywołanie funkcji to zapisuje bieżący stan tego kodu (miejsce gdzie skończył oraz wartości zmiennych), odkłada te dane na bok (na stos) i wchodzi znowu w funkcję z nowym argumentem. Jak masz kilka takich wywołań to tworzy się taka piramidka i jak dochodzi do 'A' to to jest jakby szczyt, koniec wywołań funkcji, no więc teraz musi zlikwidować tą piramidkę i po kolei pobiera dane z tego stosu, przywraca sobie stan tego kodu a skończył w miejscu F(n - 1); i została mu do wykonania jeszcze instrukcja printf(”% d ”, n + 1);, a że przed A było 0, więc otrzymujemy 1. Dochodzimy do końca funkcji, ale piramidka jeszcze dalej istnieje no i znowu pobierane są dane ze stosu itd. aż stos będzie pusty, piramidka zniknie wtedy całkowicie kończy się wywołanie tej funkcji.

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