CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Fonction récursive

mouche87000
mouche87000
Niveau 6
19 février 2013 à 22:55:14

Bonjour,

J'aimerai transformer ce code source pour qu'à la place d'un do-while j'obtienne une certaine fonction récursive, et je peine. J'ai du mal à déterminer quel(s) paramètre(s) je vais devoir "abaisser" à chaque appel de la fonction.

On me demande aussi, à cause du grand nombre de paramètres que prend cette fonction, s'il est possible de réduire le nombre ou pas.

Merci pour votre aide.

http://pastebin.com/6NWuwhx6

Pseudo supprimé
Pseudo supprimé 19 février 2013 à 23:25:49

Tu parles du
do {
...
} while (! CINI_key_down());

?

C'est une fonction qui se termine si on appuie sur une touche ? Si c'est le cas c'est bien le dernier truc à dérécursiver.
D'une façon plus générale, un code récursif est beaucoup moins bon qu'un code non récursif, même s'il est plus facile à écrire.
Ce n'est pas ton cas, tu devrais revoir l'intégralité de ton code car il est franchement sale. Peut-être verrais-tu alors émerger un meilleur algo.

PS : Tu fais allusion à une fonction avec trop de paramètres, je ne vois que la boucle principale...

Pseudo supprimé
Pseudo supprimé 20 février 2013 à 00:23:44

La récursivité, c'est du sucre algorithmique. Lorsque tu cherches à avoir un code efficace, tu évites. La récursivité te fera exploser rapidement ta pile si le traitement n'a pas la décence de débrancher rapidement :D

Adayayssayl
Adayayssayl
Niveau 6
20 février 2013 à 00:25:18

:hap:

Adayayssayl
Adayayssayl
Niveau 6
20 février 2013 à 00:25:18

:hap:

Adayayssayl
Adayayssayl
Niveau 6
20 février 2013 à 00:25:18

:hap:

Adayayssayl
Adayayssayl
Niveau 6
20 février 2013 à 00:25:18

:hap:

Adayayssayl
Adayayssayl
Niveau 6
20 février 2013 à 00:25:18

:hap:

Adayayssayl
Adayayssayl
Niveau 6
20 février 2013 à 00:25:18

:hap:

Adayayssayl
Adayayssayl
Niveau 6
20 février 2013 à 00:25:18

:hap:

chris_27
chris_27
Niveau 10
20 février 2013 à 00:47:53

mouche87000: tu ne veux définitivement pas faire ce que tu demandes. Non seulement c'est aussi pénible à coder que ce que tu as déjà, mais en plus tu vas faire un stack overflow à l'exécution.

Et pour réduire le nombre de paramètre à 1, il y a une solution triviale et qui a déjà fait ses preuves : mettre tous les paramètres dans une structure et passer la structure en argument. :-)))

mouche87000
mouche87000
Niveau 6
20 février 2013 à 00:54:03

sauf que,je n'ai pas le choix, c'est ce qu'on me demande de faire dans mon exercice.

Raspberry > Oui je parlais de cette boucle. La fonction de ton PS est la fonction récurvise qui doit remplacer le do-while. Et oui, la construction des points s'arrête dès que l'utilisateur tape sur son clavier. Cet exo fait partie d'un exo d'un cours de débutant en C, donc au niveau du temps de calcul toussa, on ne s'en préoccupe pas trop ...

Je recommence pour que ce soit clair : je dois réécrire ce code source (qui n'est pas le mien, il est donné déjà, enfin c'était l'objet d'un ancien TD) en utilisant une fonction récursive et non une boucle do-while et ensuite on me demande, comme cette fonction récursive devra prendre pas mal de paramètres, s'il es tpossible de réduire ce nombre.

chris_27
chris_27
Niveau 10
20 février 2013 à 08:21:55

Qu'on ne vienne pas pleurer que les étudiants ne comprennent rien à la récursivité alors. :(

Bon, pour remplacer un

do {
CODE;
} (!test);

tu peux faire une fonction qui prend en entrée tout ce qui est modifié dans CODE et faire :

void do_rec(VARS) {
CODE;
if (test) do_rec(VARS);
}

Mais bon, je t'avertis tout de suite que c'est mauvais sur tous les points de faire comme ça. :(

chris_27
chris_27
Niveau 10
20 février 2013 à 08:22:55

PS: il manque un while et un ! (je ne suis pas réveillé :rouge: ), je pense que tu sauras les mettre là où il faut.

mouche87000
mouche87000
Niveau 6
20 février 2013 à 16:34:48

Petite précision pour le test du while : dans la fonction récursive, pour des pb inéhrents à à la librairie graphique de cini qu'on utilise, il faudra ajouter juste après la déclaration des variables "if(CINI_key_down()) {
}
return;"

le "test" dans ton exemple, c'était bien le "cini" ?

J'ai encore du mal avec les fonctions récursives j'avoue :\ ...

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment