[C]Fonction récursive
bel3ataryah
-
bel3ataryah -
bel3ataryah -
Bonjour,
je cherchais un programme qui convertit un nombre décimal en binaire et j'ai trouvé le code suivant:
Mon problème est que je ne comprends pas comment ça se fait que la fonction n'affiche pas le binaire en inverse.
Quelqu'un pourrait m'expliquer ce code SVP??
je cherchais un programme qui convertit un nombre décimal en binaire et j'ai trouvé le code suivant:
#include<stdio.h> void showbits(int h) { if(h==1) printf("%d",h); else { showbits(h/2); printf("%d",h%2); } } void main() { int nu; void showbits(int h); printf("Num?");scanf("%d",&nu); printf("\nBin eq of %d is ",nu); showbits(nu); printf("\n"); }
Mon problème est que je ne comprends pas comment ça se fait que la fonction n'affiche pas le binaire en inverse.
Quelqu'un pourrait m'expliquer ce code SVP??
A voir également:
- [C]Fonction récursive
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
7 réponses
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.
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.
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
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.