buclă infinită: Procesul nu se termină în mod corespunzător

voturi
0
struct node
{
    int data;
    node* left;
    node* right;
};

int secondlargest(struct node* a)
{
    while(a->right != NULL){
        secondlargest(a->right);
    }
    return a->data;
}

Eu nu sunt capabil de a urmări în cazul în care am făcut greșeala și de ce ei nu iese din bucla in timp.

Întrebat 04/03/2011 la 02:35
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
1

Greșeala ta este că nu ar trebui să folosească un timp, dar în schimb, dacă o deoarece este recursiv, dar ce vrei funcția să se întoarcă? datele ultimului membru? în cazul în care acest lucru ar trebui să fie așa:

int secondlargest(struct node* a) {
   if(a == NULL) return -1;
   secondlargestr(a);
}

int secondlargestr(struct node* a) {
   if(a->right!=NULL) return secondlargest(a->right);
   return (a->data);
}
Publicat 04/03/2011 la 02:41
sursa de către utilizator

voturi
0

Dacă insistați pe versiunea recursiv, modificați în timp ce în cazul în care la.

int secondlargest(node* a)
{
    if(a == null){
        // if the first node is already NULL
        return -1;
    }
    if(a->right == NULL){
        return a->data;
    }else{
        return secondlargest(a->right);
    }
}

Bazele recursivitatii:

  • Trebuie să aibă cazul de bază
  • Divizați dimensiunea problemei recursiv

Dacă doriți modul iterativ:

int secondlargest(node* a)
{
    node* temp = a;
    int data = -1;
    while(temp != null){
        data = temp->data;
        temp = temp->right;
    }
    return data;
}
Publicat 04/03/2011 la 02:42
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more