Dam kawałek mojego kodu. Możecie powiedzieć co jest źle??

int main() {
    budowa();
    for (int i = 0; i < V; i++) //wyzerowanie tablicy przechowującej dane o tym, czy wierzchołek jest odwiedzony
        graf.odw[i] = 0;
    cout << "Kolejnosc przegladania tego grafu w glab to: ";
    for (int i = 0; i < V; i++)
        if (graf.odw[i] == 0) //wywołanie funckji DFS jeśli wierzchołek nie jest odwiedzony
           DFS(i);
}

Funckja "budowa" wszystko ładnie robi jak trzeba, niżej daje funkcje "DFS"

void DFS(int x) {
     graf.odw[x] = 1; //Zaznaczenie jako odwiedzonego aktualnego wierzchołka
     cout << x << " ";  // wyświetlenie na ekran aktualnego wierzchołka
     for (int i; i < V; i++) 
         if (graf.macierz[x][i] == 1 && graf.odw[i] == 0) DFS(i); //Dla każdego sąsiadującego wierzchołka z wierzchołkiem o indeksie x,
                                                                  //który jest nieodwiedzony wywyołujemy funcję DFS
         } 

Jak widać powyższa funckja również ma wypsywać kolejno wierzchołki. Niestety cały czas wypisuje to samo (jaki by graf nie był) - wypisuje po kolei wierzchołki