petit probleme de recursivité

petit probleme de recursivité - C - Programmation

Marsh Posté le 30-04-2004 à 15:01:26    

// petite fonctin récursive.
void Timer(double i)
{
// affiche i.
  cout << i << endl;
 
// incrémente i.
 i++;
 
// si on n'appuie pas sur une touche alors il se rappelle.
 if (!kbhit())
  Timer(i);
}
 
 
int main()
{
// déclaration des variables.
 double i = 0;
 
// appel la fonction
 Timer(i);
 
 return 0;
}
 
 
le problème c'est qu'elle s'arrète toute seule avant que j'appuie sur une touche quand i = 11832 (je crois).
Si quelqu'un sais?

Reply

Marsh Posté le 30-04-2004 à 15:01:26   

Reply

Marsh Posté le 30-04-2004 à 15:05:05    

for(int i = 0; not kbhit(); ++i)
{
   Timer(i);
}

Reply

Marsh Posté le 30-04-2004 à 15:15:56    

j'ai pas de compilo pour testé (je fais ca a l'arrache sur papier).Est-ce mieux?
 
void Timer(double i)
{  
  cout << i << endl;
  for(int i = 0; not kbhit(); ++i)
 {
    Timer(i);
 }
}
 
int main()
{
 double i = 0;
 
   Timer(i);
   
 return 0;
}


Message édité par Dark-Jedi le 30-04-2004 à 15:21:17
Reply

Marsh Posté le 30-04-2004 à 15:34:44    

il faut que je fasse une interuption avec le timer (iRQ 08) pour que ma fonction soit prioritaire et donc aller le plus vite possible (au max 0.5ms).
 
si je fais une boucle, je ne pourrais pas faire une interruption pdt tout le temps de la boucle. il faut que je le fasse le minimum de temps mais beaucoup de fois.

Reply

Marsh Posté le 30-04-2004 à 15:53:07    

t'as pas l'impression que y a 36 i dans ton paté ?

Reply

Marsh Posté le 30-04-2004 à 16:14:12    

Si mais comment faire.

Reply

Marsh Posté le 30-04-2004 à 16:19:33    

n'en a voir qu'un seul

Reply

Marsh Posté le 30-04-2004 à 16:38:33    

alors CA c'est de la récursivité [:mlc] (et les commentaires sont pas mal non plsu :o)
euh :
- pourquoi utiliser la récursivité et pas une boucle ? (parce tu voulais essayer de voir ce qu'est la récursivité tu vas me dire :sarcastic:). ton probleme à 11000qqch c'est un dépassement de pile, à force d'empiler et dépiler cette pauvre fonction récursive...
 
int main(){
 for(int i = 0; !kbhit(); ++i)
{
   cout << i;
}
return 0; // taz patapé :d!
}
ça doit faire la même chose [:joce] (ou utilise un while(!kbhit) et i++ à l'intérieur)
 
Quoi qu'il en soit petit conseil : je me doute que tu débutes et que c'était juste pour ça un essai, mais quand tu peux éviter la récursivité : fais le. C'est certe un outil tres puissant mais utile que dans certains cas. Tout (ou presque) ce qui peut être fait récursivement peut l'être itérativement. Et la récursivité c'est lourd à gérer pour le systeme (empiler, dépiler...).
 
Et il me semble (mais pas sûr) que kbhit est définie dans conio, n'est pas portable, et ne fonctionne qu'avec peu de compilos...


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 30-04-2004 à 17:00:52    

C'est pas du C à l'origine ? :D

Reply

Marsh Posté le 30-04-2004 à 20:13:07    

+1, on n utilise po la recursivité quand on sait qu on va faire des milliers d appel...

Reply

Marsh Posté le 30-04-2004 à 20:13:07   

Reply

Marsh Posté le 30-04-2004 à 20:15:09    

Dark-Jedi a écrit :

il faut que je fasse une interuption avec le timer (iRQ 08) pour que ma fonction soit prioritaire et donc aller le plus vite possible (au max 0.5ms).
 
si je fais une boucle, je ne pourrais pas faire une interruption pdt tout le temps de la boucle. il faut que je le fasse le minimum de temps mais beaucoup de fois.


 
:??:

Reply

Marsh Posté le 30-04-2004 à 20:17:12    

TotalRecall a écrit :


Et il me semble (mais pas sûr) que kbhit est définie dans conio, n'est pas portable, et ne fonctionne qu'avec peu de compilos...


 
conio c'est borland et c'est de la mouise, par contre j vois pas comment une fonction comme kbhit peu etre standard(pa la philosophie du c)
 
sinon pour faire du kbhit sous windaube, c'est win32 et rien d'autre, meme si on aime pas (ou que d'autres disent que c degeue), parce qe de tt facon on passera tj par l'api win32, le plus bas niveau de prog windows dont on connait absolument rien

Reply

Marsh Posté le 30-04-2004 à 20:17:14    


moi aussi j'ai trouvé ça drôle :d.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 30-04-2004 à 20:19:06    

skelter a écrit :

conio c'est borland et c'est de la mouise, par contre j vois pas comment une fonction comme kbhit peu etre standard(pa la philosophie du c)
 
sinon pour faire du kbhit sous windaube, c'est win32 et rien d'autre, meme si on aime pas (ou que d'autres disent que c degeue), parce qe de tt facon on passera tj par l'api win32, le plus bas niveau de prog windows dont on connait absolument rien


je suis assez d'accord avec toi !
pour kbhit c'est bien ce qu'il me semblait, mais bon à son niveau il va faire avec... (comprend par là que y a de plus gros probleme à résoudre dans son code [:kunks])


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 30-04-2004 à 21:30:34    

c net ya plus élégant pour faire un timer ^^ (surtout que celui la n'a aucun interet vu ke ca vitesse depend de la machine)
sinon pour le code c carement crade de mettre un cout dans un prog C pur :-( ensuite le passage par valeur sur une variable qui va etre modifé :-( et enfin une ptite question : c quoi le principe ou du moins l'interet du programme ?

Reply

Sujets relatifs:

Leave a Replay

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