Άπειρο βρόχο: Διαδικασία δεν περάτωση σωστά

ψήφοι
0
struct node
{
    int data;
    node* left;
    node* right;
};

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

Δεν είμαι σε θέση να εντοπίσει, όπου έκανα το λάθος και γιατί δεν έρχονται της έξω από το βρόχο while.

Δημοσιεύθηκε 04/03/2011 στις 02:35
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
1

λάθος σου είναι ότι δεν πρέπει να χρησιμοποιείτε μια στιγμή, αλλά αντ 'αυτού μια περίπτωση, διότι είναι αναδρομική, αλλά τι θέλετε η συνάρτηση να επιστρέψει; τα στοιχεία του τελευταίου μέλους; αν ναι, θα πρέπει να είναι κάπως έτσι:

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);
}
Απαντήθηκε 04/03/2011 στις 02:41
πηγή χρήστη

ψήφοι
0

Αν επιμένετε να την αναδρομική έκδοση, αλλάξτε το διάστημα σε περίπτωση.

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);
    }
}

Βασικά στοιχεία της αναδρομής:

  • Πρέπει να έχει βασικό σενάριο
  • Αναλύστε το μέγεθος του προβλήματος αναδρομικά

Αν θέλετε το επαναληπτικό τρόπο:

int secondlargest(node* a)
{
    node* temp = a;
    int data = -1;
    while(temp != null){
        data = temp->data;
        temp = temp->right;
    }
    return data;
}
Απαντήθηκε 04/03/2011 στις 02:42
πηγή χρήστη

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