Suite de Fibonacci en itératif (1)

Série d'exercices

Cet exercice fait partie d'une série :

La suite dite "suite de Fibonacci" est une suite d'entiers qui commence par 0 et 1. Chacun des autres termes est la somme des deux précédents : ainsi les termes suivants sont 1 (car 0 + 1 = 1), 2 (car 1 + 1 = 2), puis 3 (car 1 + 2 = 3) et ainsi de suite. Les premiers termes sont donc : 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...

On dit que le terme d’indice 0 est \(u_0=0\), celui d’indice 1 est \(u_1=1\), celui d’indice 2 est \(u_2=1\) … celui d’indice 7 est \(u_7=13\) etc.

Compléter la fonction fibonacciqui prend en paramètre un entier n et renvoie le terme d'indice n de la suite de Fibonacci.

Exemples :
>>> fibonacci(0)
0
>>> fibonacci(3)
2
>>> fibonacci(7)
13
>>> fibonacci(8)
21
>>> fibonacci(9)
34
Version 1

Pour représenter des termes consécutifs de la suite de Fibonacci, on utilisera deux variables a et b.

  • Au début a = 0 et b = 1
  • Au bout d'une étape a = 1 et b = 1
  • Au bout de deux étapes a = 1 et b = 2
  • Au bout de trois étapes a = 2 et b = 3 ainsi de suite.

Au bout de n étapes a contient le terme de rang n et b celui de rang n+1.

On pourra utiliser une ou plusieurs variables temporaires.

###(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 : 10/10

.8217.128013,n Oèçw5e(38Cm=R0p)rhkuois;cEb/6.S1vàtq_dg:Léxay24P7+fl050Q0k0N0W0A0(0B0e0D0(0W0B0B0q010N0A0t010406050B0y0p0p0W0v0X040J0z0(0y0|0z0d0e020W0p0t0C0e0r0k160v0O0y0k0B050G13151719110t041x1E051H0G1H1J1E110Q0A0L0;0?0^0`0w0A0R0w0(1X0w0N0 050,0F0(0k1S0@0_011W1Y1!1Y0N1*1,1(0N0F0z0Q191)0v1F0N0w0;1c0B0t0W0d0`0Y011.1U010%0.0k0d1k0k1(292b2g1:2j1,2m0p2o040b0e0!0v0z0t0z0B0A1f1h0*270v0v0k0D2J1x2q0d1F0G252V0N2322240Q2s0`1!0d2l2G1(1P1R0=1/2)0A2+0d1 1Q1(0t2O1F2T2V30122a1h2;2h2_0v160(0 0K2S3410332r361:383a0 0Y3e2b3g2T2(013l0W3b040m3p2U113s3j0`3v3x0Z3A3r343t3G0 0j3J3C3L3E3u0z393w0 0H3Q3h351T3k3V3m040#3!3D3%3F3)3X040n3J1G2~1x2/2Y0Q2$3t0D1 2y0)1Q1F2}0k2 3f3^410*493i3/010x0 0*0%3^3.2=010i0 0e4m3S4g0d0%0 2j1~2m0D0D0A4t4f4o0~040l4F3$4o0d0 0d4L3t4I0u0S3Q0e4X4s4n370 0W3J4Z4u4o0z0 0q4(3#3t0p0A0 0s4W4Y4:3T4O040F4/4!1:4,044.1y3f4)4G2h4=3c4_4X4{4g4i040%3V504*4#044E563q584M2h0z4q5o4Q5q2U5s3M0F0 0v2b0R0k4R3T4I4K5z4e5t3k4P5J4g4T4V5N064Y5Y5B4|0 0N1q0t5l59524-5*5P3F0 4 5W5Z4`515:4~5.3t5355305!4v4$5|3T530$64625{5?5@614N635N6d5u5-6g5f6e045%1l5d6h1:5h2O0N0y0v5y606l5n4%5W1x4c483_6G0G3|1x0N3~6L2!2W1~202Y0W1+6I3|1D5O3t2O0p0P0%0W0x0k0P0w0m0 1p1r1t1v0e5V321K3g1E0T0W0e1P0%2j0D0y0(0N0U0e0A4D0e0L0A2l0N6 0y0e6(2I0e1t0a0.7i0W1e0e0p2`2j0k0v0e1,0:0Y7b170A6U7z4s6F046C7I0e0+7H426a7I0I0e0f1h0t0k7r0L0z740z0A7x7j2O6@1G3g2/3t1=1Z1#1%463`6_327I6A5Q7J684+6j6z5_3u5;3-5m7}5=82870`5~7 6B8e5,04676k834}893f110G7{1K3`6J456Y0J0A0e1g0e2a0v7f0W0L2P7O4d6~0q0e3z8q7P7M7f057I0F0e8L3P8O4d0c8z1h0L6~0z0F5%0d7%8I488K0e8X7L7N8S7P8U8L0K4^8Y487S0E1h0k710+8!0D0a1v7f0?0e2_0y8G0(1,7C1,6w6 1-8^8J6E7P8!0Q1g0D8;8!1t8y990e1e0.0A0B0U1-2F9k0D3w731,7x9b9d9f9h8%9j7x2L9n485=7R7T1h6~9s0d9u7W0v0Q7h0(0a2b4D2l2+9i7X9U9m7I7K7P0I7,6Y7U8B7X7f0U0R3w1q7e0e8+5%7x5V1N442:4g7:1@1$2|7^4a5N9W6Z5#6a8a5+8c81577|5`6Cau5/01668g5`8n3q3Rav847~8k8baEax5razaMaI3B9p4d6H2V6X1I1a8y8A8C7f0M9c7!8G7q9l8.7J8V8MaX488Qa=8`8;a_048!8A8%8z8*2l8-0n8B7!9N6?0*0y0V7C0v7E6V0B7S0o0+5%7i7$0B96980B9a6~9S9^788,0|a7a;aq9Y8P9x7Mbua29+1u9~6`6Y0!ba0e0U7caca;9*0Q7*0y9?bx9k9%7f8A6~0F1v7$7VbR9bbd0V0A0g2x0e0W942Q0W2Jb11h9bbu0z0D6*6 2b0:b!1-8%bh7F1-6o2F5F7%0k8!0Ba.a90W0t7W0(9Fa=cga 8z7haq0N6p8~04bNaf6|bc7Xbf8G0v2H1g0:131Q2b5%0:7Z0d7f2}2E2G7w6 9/1e2O0:6(0hcNa;41cVba2+7x0D9G2D1+b^ck0e0Bc89A0|1!0Bc!2Lccbi9hcg3V0-2OcE3g6J0+0-0/04.
Version 2

Dans la proposition de correction de la question précédente, nous avons utilisé trois variables différentes a, b et temp. Compléter la fonction ci-dessous pour n'en utiliser que deux : a et b, sans affectation multiple.

Aide 1

On peut commencer par déterminer le nouveau b, et ensuite utiliser ce nouveau b pour déterminer le nouveau a.

Aide 2

Que vaut le nouveau a en fonction du nouveau b et de l'ancien a ? Vous pouvez vous aider avec des exemples.

###(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 : 10/10

.128013,n èw-5e(38m=R0p)rhkuois;cb/6.S1vàtqA_dg:xéay24P7+fNl050N0i0J0S0x0#0y0d0A0#0S0y0y0n010J0x0q010406050y0v0m0m0S0s0T040F0w0#0v0_0w0c0d020S0m0q0z0d0o0i130s0K0v0i0y050C101214160~0q041u1B051E0C1E1G1B0~0N0x0H0.0:0=0@0t0x0O0t0#1U0t0J0|050)0B0#0i1P0;0?011T1V1X1V0J1%1)1#0J0B0w0N161$0s1C0J0t0.190y0q0S0c0@0U011+1R010Z0+0i0c1h0i1#26282d1-2g1)2j0m2l040a0d0W0s0w0q0w0y0x1c1e0%240s0s0i0A2G1u2n0c1C0C222S0J201 210N2p0@1X0c2i2D1#1M1O0/1,2$0x2(0c1|1N1#0q2L1C2Q2S2}0 271e2.2e2?0s130#0|0G2P310}302o331-35370|0U3b283d2Q2#013i0S38040k3m2R0~3p3g0@3s3u0V3x3o313q3D0|0h3G3z3I3B3r0w363t0|0D3N3e321Q3h3S3j040X3G1D2{1u2,2V0N2Z3q0A1|2v0$1N1C2`0i2|3c3*3?0%3~3f3!0@0u0|0%0Z3*3A45010f0|0d4b3P4d0c0Z0|2g1{2j0A0A0x4i442/010{040j4u3Z4w0c0|0c4B3q4y0r0P3N0d4N4h4c4D0|0S3G4P4j4w0w0|0n4U3Y3q0m0x0|0p4M4O4$3Q4E040B4#4Q2e4Y044!1v3c4V4v2e4(394,4N4.4d47040Z3S4?4W340|4t4|3n4~4C4^4f042;5b4 3h0B0|0s280O0i4H3Q4y4A5g2R554R044G5B435j1-4J4L5H064O5P5i3J0|4=5H5R3Q4_4{2}5W4k4S5o5J0@4_0Y5(5S4;535Q5D5d044T5V5=1-5Y5-4/5T5}4d4_0g605E5^2}5O4-4@1-572L0J0v0s5G5!5`3C5%5N1u413}3+6p0C3.1u0J3:6u2X2T1{1}2V0S1(6r3.1A5I3q2L0m0M0Z0S0u0i0M0t0k0|1m1o1q1s0d5M2 1H3d1B2z2)0c0-270s0d0i0Q1n0q1)6Z4h6$6H056o5@0d0n0d3w0C6}6/0J4h6}0B6 0d3M733@040E6_1K1F040L2`0e0-0#002;0y2W0v2N0x1d777e79700S0d0Y0d5U742?0v0-0S0H1d0-6|7e7C7072740(54787a0l6n7e0d0j0A14717D7b7Y0r0E1D6%040!0w7J0d7M0v0#7N0d6X0d6@7I0H0i0S0v7y425^740y0w2F8000284s2i873}7G7e0b750d0N1d0A7~0v7q0#0d8b8d0R0H3t0v0R0d0I7b7/6`7j0W7@6.0A0i0:0d0+8x0v0Z2g762I6N0x2L8j6~70790g0d897e7:0~6s0(0*0,04.
Version 3

Compléter la fonction fibonacci ci-dessous, avec une affectation multiple.

Affectations multiples

En Python, il est possible d’affecter des valeurs à plusieurs variables en même temps.
Ce sont des affectations multiples.

>>> x, y = 5, 6
>>> x
5
>>> y
6

On peut aussi effectuer des affectations multiples comme dans l'exemple ci-dessous :

>>> x, y = 5, 6
>>> x, y = x+y, x*y
>>> x
11
>>> y
30

Python commence par évaluer ce qui est à droite du symbole =, avec les valeurs actuelles des variables (ici x = 5 et y = 6). Dans un second temps, il fait les affectations avec les variables situées à gauche du symbole =. Les variables (ici x et y) sont mises à jours simultanément.

Remarquons que dans l'exemple suivant, x est mis à jour avant y, ce qui donne donc un résultat différent :

>>> x, y = 5, 6
>>> x = x + y
>>> y = x * y
>>> x
11
>>> y
66

###(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 : 10/10

.128013,n w5e(3m=R0p)rhkuois;cb/S1vtqA_dg:éay24P+fl050H0g0D0L0u0S0v0d0x0S0L0v0v0k010D0u0n010406050v0s0j0j0L0p0M040A0t0S0s0-0t0c0d020L0j0n0w0d0l0g0`0p0E0s0g0v050z0@0_0{0}0=0n041l1s051v0z1v1x1s0=0H0u0C0#0%0)0+0q0u0I0q0S1L0q0D0:050W0y0S0g1G0(0*011K1M1O1M0D1U1W1S0D0y0t0H0}1T0p1t0D0q0#100v0n0L0c0+0N011Y1I010R0Y0g0c180g1S1}1 241!271W2a0j2c040a0d0P0p0t0n0t0v0u13150U1{0p0p0g0x2x1l2e0c1t0z1_2J0D1@1?1^0H2g0+1O0c292u1S1D1F0$1Z2T0u2V0c1:1E1S0n2C1t2H2J2;0?1~152#252*0p0`0S0:0B2G2^0;2@2f2`1!2|2~0:0N321 342H2S01390L2 040i3d2I0=3g370+3j3l0O3o3f2^3h3u0:0f3x1u2/1l2Z2M0H2Q3h0x1:2m0T1E1t2.0g2:333E3N0U3V361H1!0r0:0U0R3E3r3$0+0e0:0d3,3z3s3i0R0:271/2a0x0x0u3?3#2$010/040h422_3.3i0:0c493h460o0J3x060d4m3=3-440c0:0L4f3^460b3x4o3@4b4r040y4y354a440t0:0k4F4p250j0u0:0m4u4b4w4M4A444P304k4n4z43253(040R0t0p4W4(380:411m334%4H250t3:042(4/4`380y0:0p1 0I0g4T4446484@3e4G3A4d59254h4j5d3p4$4$5f3^4C4t5m3!510+4V5u4_5g4D503h4J044L5z5q4B0:4E5u5J5a0:4x5I4N4;045t2?5T0+5F0Q5i5U5M2;4l4n5O4)540V0s0p4e5S4X2{4s4k1l3Y3U3F5}0z3I1l0D3K622O2K1/1;2M0L1V5 3I1r5v3h2C0j0G0R0L0r0g0G0q0i0:1d1f1h1j0d5l2?1y341v5|5V0b0d5M6D0d1j0D0d0s2V0d0L122C0d0K0x0p2w5:1X2z056D0h0L6F0y0o5{3O2J1B1w040F6R1X0v10120u140d2t0)0u6c6x1u342Z3h1$1N1P1R3S3G6z2?6D5,3%3)0g3+5N5Y014}3=7l5@383`4+70140L3 4?5X7r5x0:5c7A4:3t5h7q7G450:4i4#5+7m5b5$7H5V7S7L045R2;5A5r5L7V4h5D3^5F5H7Z7g7C477V4Z044S7J5w7W7Y4^7.017=317^4g7M7O4m7}4*4,4.5?7K4C7z7|7m4|4=5=7-7m0c5304550c577%7D7V4C8i3W7Q7M6y335*5o7!4U8s817#7U8G8E7X7)5K5C8J5P046+8a7_7+8M8Q7E8w7B4c8O7F7_5y8j8!5s8W4{0:5#8T5B5(8Z7K7(5u8B8D444*2C0D5:8v3e8|5^8I5)6,3Z5~2J6e3H0V0X0Z04.