petit probleme de recursivité - C - Programmation
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;
}
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.
Marsh Posté le 30-04-2004 à 16:38:33
alors CA c'est de la récursivité (et les commentaires sont pas mal non plsu )
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 ). 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é !
}
ça doit faire la même chose (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...
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...
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). |
Marsh Posté le 30-04-2004 à 20:17:12
TotalRecall 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
Marsh Posté le 30-04-2004 à 20:17:14
ReplyMarsh 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) |
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 )
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 ?
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?