A voir également:
- [C]Fonction récursive
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
- Fonction remplacer word - Guide
- Excel renvoyer la valeur d'une cellule en fonction d'une autre - Forum Logiciels
7 réponses
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
9 nov. 2010 à 01:40
9 nov. 2010 à 01:40
Je ne vois pas pour quelle raison ce code ne fonctionnerait pas.
Il m'a l'air classique et correct ... sauf évidemment si on rentre '0' ou un nombre négatif -> dépassement de pile assuré.
Bonne continuation.
Il m'a l'air classique et correct ... sauf évidemment si on rentre '0' ou un nombre négatif -> dépassement de pile assuré.
Bonne continuation.
Je n'ai pas dit qu'il ne marche pas.
C'est juste que je ne comprends pas comment il se fait qu'il marche.
C'est juste que je ne comprends pas comment il se fait qu'il marche.
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
9 nov. 2010 à 22:42
9 nov. 2010 à 22:42
C'est simple, la démarche en base 2 est la même que celle en base 10.
Le même code en base 10:
Le même code en base 10:
void show10(int h) { if (h<10) printf("%d", h); else { show10(h/10); printf("%d", h%10); } }Bonne réflexion.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
10 nov. 2010 à 08:18
10 nov. 2010 à 08:18
Salut.
C'est marrant, en lisant ton code, je me faisais la même réflexion : "ça affiche à l'envers".
Mais si tu réfléchis, tu te rends compte que plus tu divises un nombre plus tu conserve les valeurs élevés (enfin, tu vois). Donc, l'affichage se fait bien dans le bon sens.
C'est marrant, en lisant ton code, je me faisais la même réflexion : "ça affiche à l'envers".
Mais si tu réfléchis, tu te rends compte que plus tu divises un nombre plus tu conserve les valeurs élevés (enfin, tu vois). Donc, l'affichage se fait bien dans le bon sens.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
10 nov. 2010 à 08:27
10 nov. 2010 à 08:27
Ca affiche à l'endroit car tu as mis :
showbits(h/2);
printf("%d",h%2);
L'affichage a lieu après la récursion. Si t'avais mis le printf avant, cela aurait bien affiché à l'envers.
Cdlt,
showbits(h/2);
printf("%d",h%2);
L'affichage a lieu après la récursion. Si t'avais mis le printf avant, cela aurait bien affiché à l'envers.
Cdlt,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je ne comprends toujours pas,
je prends l'exemple de 8:
- dans main on appelle showbits(8)
- 8 est différent de 1 alors on passe au else qui appelle showbits(4)
- 4 est différent de 1 alors on passe au else qui appelle showbits(2)
- 2 est différent de 1 alors on passe au else qui appelle showbits(1)
- 1==1 on affiche 1
????
Je suis perdu
je prends l'exemple de 8:
- dans main on appelle showbits(8)
- 8 est différent de 1 alors on passe au else qui appelle showbits(4)
- 4 est différent de 1 alors on passe au else qui appelle showbits(2)
- 2 est différent de 1 alors on passe au else qui appelle showbits(1)
- 1==1 on affiche 1
????
Je suis perdu
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
Modifié par loupius le 11/11/2010 à 23:19
Modifié par loupius le 11/11/2010 à 23:19
J'avais mal compris ce que signifiait "affichage du binaire en inverse"; je pensais qu'il s'agissait d'affichage de '1' au lieu de '0' et inversement.
Comme si bien indiqué par mes deux prédécesseurs, l'affichage à lieu après la récursion; il suffit de suivre. Si on prend ton exemple:
Comme si bien indiqué par mes deux prédécesseurs, l'affichage à lieu après la récursion; il suffit de suivre. Si on prend ton exemple:
- dans main on appelle showbits(8) - dans showbits: 8 != 1 -> else qui appelle showbits(4) - dans showbits: 4 != 1 -> else qui appelle showbits(2) - dans showbits: 2 != 1 -> else qui appelle showbits(1) - dans showbits: 1 == 1 -> qui affiche 1 - retour de showbits(1) -> qui affiche 0 - retour de showbits(2) -> qui affiche 0 - retour de showbits(4) -> qui affiche 0 - retour de showbits(8) -> on est dans le 'main. RESULTAT: 1 0 0 0Bonne réfexion.