Προς το περιεχόμενο

αναδρομικη συναρτηση


PotirasK.O

Προτεινόμενες αναρτήσεις

Δημοσ.

μπορει κανεις να μου εξηγησει την παρακατω αναδρομικη συναρτηση ???

 

 

>
void func(int n) {
if (n>0)
  {
  func(n-3);
  printf(“%d ”,n);
  func(n-2);
  }
}

Δημοσ.

Για να καταλάβεις πώς δουλεύει πάρε ένα μικρό n , πχ. n=5, και δες τι δίνει με χαρτί και μολύβι.

 

Η συνθήκη τερματισμού είναι η n==0.

Kαι η επεξεργασία που γίνεται για την αναγωγή του πρόβλήματος σε μικρότερο είναι οι κλήσεις για n-3 και n-2...

Δημοσ.

αντε γεια μας.

 

εννοειται πως το εκανα και εβγαζα λαθος αποτελεσματα αλλιως θα εκανα ποστ ρε παιδια??

 

οταν το τρεχω στον builder αλλα μου βγαζει.

Δημοσ.

To πρόγραμμα πρέπει να τρέχει σωστά διότι η συνάρτηση είναι πολύ απλή.

Ο φίλος πιθανόν δεν έχει καταλάβει την σειρά των κλήσεών της και περιμένει διαφορετικό αποτέλεσμα από αυτό που βλέπει...

Δημοσ.
To πρόγραμμα πρέπει να τρέχει σωστά διότι η συνάρτηση είναι πολύ απλή.

Ο φίλος πιθανόν δεν έχει καταλάβει την σειρά των κλήσεών της και περιμένει διαφορετικό αποτέλεσμα από αυτό που βλέπει...

 

 

ε ναι εχεις δικιο.

 

μπορει καποιος να μου εξηγησει την σειρα με την οποια εκτελουνται ???

Δημοσ.
μπορει καποιος να μου εξηγησει την σειρα με την οποια εκτελουνται ???

 

Έστω ότι καλείς κάπου μέσα στο πρόγραμμά σου την func με παράμετρο 4:

>
func(4);

 

Αντικατέστησε με τον κώδικα της func:

>
if(4 > 0)
{
   func(4 - 3);
   printf("%d ", 4);
   func(4 - 2);
}

 

Ξανά αντικατέστησε όπου βλέπεις κλήση της func με τον αντίστοιχο κώδικα, εκτός από τις περιπτώσεις που το όρισμα της func είναι αριθμός <= 0 και συνέχισε ούτω καθεξής:

>
if(4 > 0)
{
   if(4 - 3 > 0)
   {
       func(4 - 3 - 3);
       printf("%d ", 4 - 3);
       func(4 - 3 - 2);
   }

   printf("%d ", 4);

   if(4 - 2 > 0)
   {
       func(4 - 2 - 3);
       printf("%d ", 4 - 2);
       func(4 - 2 - 2);
   }
}

Δημοσ.

Κάνε αυτό που σου είπα. Δες τι δίνει με χαρτί και μολύβι για κάποιο μικρό n, πχ. n=8.

Η σειρά είναι ότι για κάθε κλήση, δηλ. για κάθε n, εκτελούνται πρώτα όλοι οι κλάδοι f(n-2).

Mόλις τερματιστεί κάποιος κλάδος f(n-2), εκτελείται o f(n-3) που μπορεί να περιέχει εκ νέου f(n-2) και όμοια.

Γι' αυτό μπερδεύεσαι.

Φτιάξε ένα διάγραμμα (κάτι σαν δέντρο) με τις κλήσεις σύμφωνα με την παραπάνω σειρά αλλιώς δεν μπορείς να το αντιληφθείς εύκολα.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...