je coince sur algo recursif :/

je coince sur algo recursif :/ - C++ - Programmation

Marsh Posté le 03-03-2004 à 08:06:27    

je dois ecrire une fonction qui afficher le contenu d une pile. par exemple la pile  12345 passe a la fonction, qui elle affichera 12345.
 

Code :
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <stack>
  4. using namespace std;
  5. void reverse_stack(stack<int> s)
  6. {
  7. //je pense que la condition d arret est :
  8.         if (s.empty()) return;
  9.  
  10.         //sinon on lui envoie la pile - l element top().
  11.         s.pop();
  12.         return reverse_stack(s);
  13.         //enfin bref c est faux et je comprend pas trop comment                faire.  
  14. }
  15. int  main()
  16. {
  17. stack<int> test;
  18. for (int i=0; i<10;i++)
  19. test.push(i);
  20. reverse_stack(test);
  21.         return 0;
  22. }


j ai un peu de mal avec le recursif :/


Message édité par xiluoc le 03-03-2004 à 08:07:03
Reply

Marsh Posté le 03-03-2004 à 08:06:27   

Reply

Marsh Posté le 03-03-2004 à 08:48:27    

Pourquoi ta fonction d'affichage s'appelle reverse?
edit : il est ou l'affichage d'ailleurs


Message édité par Ace17 le 03-03-2004 à 08:49:10
Reply

Marsh Posté le 03-03-2004 à 09:13:07    

Code :
  1. void reverse_print(stack<int> s)
  2.   {
  3.             // si c'est vide on se casse
  4.             if (s.empty()) return;
  5.        
  6.             //on prend le sommet de la pile
  7.             int val = s.pop();
  8.             //on imprime le fond de la pile
  9.             reverse_print(s);
  10.             //on imprime le sommet de la pile
  11.             cout << val;
  12.   }


 
tu noteras qu'on stocke le contenu de s sur la pile d'appels, et que c'est pas récursif terminal (intrinsèquement, ça ne l'est pas).


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 03-03-2004 à 10:21:56    

merci je ne savais pas qu on pouvais faire int val = s.pop()  
mais parcontre ja i une erreur et je vois pas ou !

Code :
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <stack>
  4. using namespace std;
  5. void reverse_print(stack<int> s)
  6. {
  7.         // si c'est vide on se casse
  8.                 if (s.empty()) return;
  9.                 //on prend le sommet de la pile
  10.  int val = s.pop();
  11.                 //on imprime le fond de la pile
  12.                 reverse_print(s);
  13.                 //on imprime le sommet de la pile
  14.                 cout << val;
  15. }
  16. int  main()
  17. {
  18. stack<int> test;
  19. for (int i=0; i<10;i++) test.push(i);
  20. reverse_print(test);
  21. return 0;
  22. }


 

Code :
  1. g++ -o tut2_3.out tut2_3.cpp
  2. tut2_3.cpp: Dans function « void reverse_print(std::stack<int, std::deque<int,
  3.    std::allocator<int> > > ) »:
  4. tut2_3.cpp:17: error: void value not ignored as it ought to be
  5. zsh: exit 1     g++ -o tut2_3.out tut2_3.cpp


apperement il aime pas le int val=s.pop() c est normal, elle renvoie pas d int cette fonction.
 
 :sweat:
 
en remplacant pop par top() erreur de segmentation


Message édité par xiluoc le 03-03-2004 à 10:23:58
Reply

Marsh Posté le 03-03-2004 à 10:28:19    

C'est quoi le header de la classe Stack?

Reply

Marsh Posté le 03-03-2004 à 10:41:38    

hum sous linux je fais comment pour aller voir ca ?

Reply

Marsh Posté le 03-03-2004 à 10:46:25    

http://www.sgi.com/tech/stl/stack.html
 
il va falloir apprendre à sortir les doigts du cul.
 
tu remplaces

Code :
  1. int val = s.pop();


par

Code :
  1. int val = s.top();
  2. s.pop();


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 03-03-2004 à 10:52:10    

merde je suis vraiment ***
merci !!!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed