Conversion récursive binaire/décimal et décimal/binaire

L’objectif de cet exercice est d’écrire deux fonctions récursives dec_to_bin et bin_to_dec assurant respectivement la conversion de l’écriture décimale d’un nombre entier vers son écriture en binaire et, réciproquement, la conversion de l’écriture en binaire d’un nombre vers son écriture décimale.

Dans cet exercice, on s’interdit l’usage des fonctions Python bin et int.

L’exemple ci-dessous montre comment obtenir en binaire l’écriture en binaire du nombre 25 :

\(25 = 2 \times 12 + 1\)
\(\phantom{25} = 2 \times(2 \times 6 + 0)+1\)
\(\phantom{25} = 2 \times (2 \times(2 \times 3+0)+0)+1\)
\(\phantom{25} = 2 \times (2 \times(2 \times(2 \times 1+1)+0)+0)+1\)
\(\phantom{25} = 2 \times (2 \times(2 \times(2\times(2 \times 0+1)+ 1)+0)+0)+1\)
\(\phantom{25} = 1 \times 2^4 + 1 \times 2^3 + 0 \times 2^2 + 0 \times 2^1 + 1 \times 2^0\)

L'Ă©criture binaire de 25 est donc 11001.

0n rappelle Ă©galement que :

  • a // 2 calcule le quotient de la division euclidienne de a par 2.
  • a % 2 calcule le reste dans la division euclidienne de a par 2.

On indique enfin qu’en Python si mot = "informatique" alors :

  • mot[-1] vaut 'e', c’est-Ă -dire le dernier caractère de la chaĂ®ne de caractères mot.
  • mot[:-1] vaut 'informatiqu' , c’est-Ă -dire l’ensemble de la chaĂ®ne de caractères mot privĂ©e de son dernier caractère.

Compléter, puis tester, les codes de deux fonctions ci-dessous. On précise que la fonction récursive dec_to_bin prend en paramètre un nombre entier et renvoie une chaîne de caractères contenant l’écriture en binaire du nombre passé en paramètre.

Exemple :

>>> dec_to_bin(25)
'11001'

La fonction récursive bin_to_dec prend en paramètre une chaîne de caractères représentant l’écriture d’un nombre en binaire et renvoie l’écriture décimale de ce nombre.

>>> bin_to_dec('101010')
42
Compléter ci-dessous

Compléter, puis tester, les codes de deux fonctions ci-dessous.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 5/5

.128013kg[: r);S/q(lo4y,6b=ac1+5ud3t28_P7evp-fh0%*9mn]is050B0J0D0v0W0n0X0f0w0n0v0X0X0u010D0W0L010406050X0A0T0T0v0g0q040j0o0n0A0=0o0U050k0|0~10120`0L04051i1b1l0k1i0`0B0W0K0*0,0.0:0,0U0c0A0v0c0J0M0L0q0D0O190f0O0W0c0O0n1N0O0D0^050#0t0n0J1u0-0/011M1O1Q1O0D1W1Y1U0D0g1j1I0*150X0L0v0U0:0E011!1w010N0%0J0U0v0T0J1U1_1{201$231Y26280^0a0f0H0g0o0L0o0X0W180U0f0Z1@0g0g0J0w2t1b2b0U1j0k1I2G1:1=1;1V0B2d1x0W0U252q1U1r1t0+1#2Q2S0U0o2W1U0L2z1j2E2G2-0{1`2u2Y212$0g0 0n1U0v1L2z0N0:030G0G0w2%0J1Q2#0o0M0E0M0x0^0f0x1b0v2.2;0_2:2c2?1$2^2`2|2~0J3001323436382T3b3b3f0E3i3k1{3m2E2P013r0v2{1j2}0O2 3133350Z3B2$3D0C3f0C3H2D3l0`3L3p0:3O3Q053S3U3x3W3A2R3C3c0p3f0p3)1c3+3n2=1v3q0o2_3P3t3T3v3V3z3Y3{3!3c0z3f0z412-3,2;3M3:4b3@3y3X374h3a3c0s3f0s4n433-463/483s3R3u3w4v3`393D0I3f0I4E3J4p3o4H3N4J4a4L4c4N3_4g4Q3c0F3f0F4V2F4X452Z4!493;3?4d3^4f4x4,0M0S3f0S4;3K4q3.4_4K3=4M4e4w3Z4z3d0P0^0x0P564?4r4#4{5d4~5f4y3D0x3e045x5n445p4`4t4}4O4+3|3d1~5z3G0k3j3*4W5C594s4%4u4*505J0x3$5z3(5O3I4=5S4Z5U5c4(5e4P5Z3~5z405(5Q5*4G4^5-4|4)4 5g5w4k5z4m5_425R5|2@5q5F605u510x4B5z4D674o5+5}6c5V5G5X623c0x4S5z4U6l4F585,6p5.5W615v6u4.5z4:6z696B6o5E6q6e5;4i3d535z556M2F1m2+1b2W2J0B1=2O594w2V1s1j2*0J2,3l5`1j4w6@2c0W0B0:332E5w3t6~706G6g1 2h0J766f5Z1U5_6a1$0b0^0Z0N6_0f6n2@0N7k2A0G0D0o0G0t2R6_7p1$0@040m7A7h3/0^0U0t0G0Z0w7G6O217D0h0e6_0`686!3L7501712;3D5L5c7!6s6H3E0f7a7c6T5h7)5(0f7_7o7H3N0^0l7P4Y4^7D0r7n7B7I040g857|0o0^0u8a7Q3q7J7L7N8f81218c040k0k8l4@210T0W0^5N2/7|838s4r8i7M2A8C598o0Q8H4Z8v8x7V802u7+0G723c5#7*6 7#775J3$7/277b8Z7d6U8W7^7`86017j040W7m7X047{8g877 8_8{8m1$8o0u8e8 8:8N045m8_8:7D7U8 7W8z4q8S8U0M5?8X7;5I6U3~8%289o5Y9q7f3j7`9z908t7i0^2z0D0A0g1a967|7K0^0X1:8Q3M7D7F9b9L9E9Q597S7n9g6^7Z8Y7$1{3D649n8*7=9+798(9u6t0M9,8.7_8:8=370X0J9X4Z9d8P9U9i9(8T7%4A74a78+5h4B9s8)7,516i3H9A8/7|8=9F9H9J2-9B8D047N7u7w7yas9$8|019Sa15}7~aG7R0^0h8L4^8o0yaN2@0t9N9Pa5910:aFaW9C8789a!9RaL9!9Q9ja90M6w9-ai5J4Sag9?7-a:5(9#3J5Ca-9*4-aba_514.a^9.9p5h6J3)ao7s8^at8:0U7r04aAay8F7Oa(9Y0^9T9haX7}047K7x7zbpa2aL9e6ma(b00U3D6Wa;8!6U53b7a=bM9x8`anaD8=8@aR3qaT042gaJ7Cbrb$87bxaAb)aEa*9KaD9395bg7|983hbA820^bD43bFa79k5lb3b89v5hc3bObLc75j2G9yamau59bVbf3lcg5,8Eb,b:bub=bX0:0X5y02030C0S0i0Pcwcy0ib-a39fa,c1a.5xc4bPc73ec9ad5w5yalcf9z9|9E0!arcs01989abEbt8RcJb15KcMca5w1~cQ9/6u7@ceamcX049~a0b{aK04b~5Rc076c28W2}8ScR6u8$7:c59@5!bRcVcWbd88cZ9Ic#b_a+d58Zc29md9acc@3d9rdecN5w9m9`cl4^9}0(c c*a)d2a4dLbG63c/db3d4kc?b9dRcdbSc{dlbWcpa#bvb+bzdLbq040db-8o0Mb-dqd0b%040Vc#crd(3Mcu0^cCczcBcxczcFb}dOaC6}c,bH6uakdwb45ZafdBc:efdidj9{9Vbk2s7M2n2sd}8ddp8w99eaa~9%d6cKa:ehdf7-6v9;9teJ6ga{c`9Ac|c~e8dN8_a}7Ya6eFc-0xbbeIdC6IeMahem3dbbdFcVbh0^7y0Deu0oewd 8Ieye}8MeAb`c)ebc+e#ee6VdSdy0xbNeldTfceod#bUcY9Gdof04^988yck8:8o0Rc#0Ue@2Rbm8kd_aYb(fBd*7Lcod-bBd/d3eZcq0^d?fEd^fIb|d{aMfn8n0^aQfW8hese_0Bev0DeC6!0k6{6#6?6%6:1b0D6*f?2M2H0v1Xf:0k6(7W0Z0#0%0X04.