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.128013nLximwOgyk02P;oC, 5àç6+uRaèl84t/sbrvce.E3)fh:1S=é7_dqp(050#0N0G0B0f0D0I0t0M0D0B0I0I0X010G0f0%010406050I0z0g0g0B0K0k040W0q0D0z0|0q0c0t020B0g0%0p0t0A0N160K0$0z0N0I050H13151719110%041x1E051H0H1H1J1E110#0f0L0;0?0^0`0T0f0j0T0D1X0T0G0 050,0J0D0N1S0@0_011W1Y1!1Y0G1*1,1(0G0J0q0#191)0K1F0G0T0;1c0I0%0B0c0`0n011.1U010S0.0N0c1k0N1(292b2g1:2j1,2m0g2o040b0t0o0K0q0%0q0I0f1f1h0*270K0K0N0M2J1x2q0c1F0H252V0G2322240#2s0`1!0c2l2G1(1P1R0=1/2)0f2+0c1 1Q1(0%2O1F2T2V30122a1h2;2h2_0K160D0 0V2S3410332r361:383a0 0n3e2b3g2T2(013l0B3b040Q3p2U113s3j0`3v3x0F3A3r343t3G0 0u3J3C3L3E3u0q393w0 0x3Q3h351T3k3V3m040Z3!3D3%3F3)3X040E3J1G2~1x2/2Y0#2$3t0M1 2y0)1Q1F2}0N2 3f3^410*493i3/010l0 0*0S3^3.2=010h0 0t4m3S4g0c0S0 2j1~2m0M0M0f4t4f4o0~040(4F3$4o0c0 0c4L3t4I0R0U3Q0t4X4s4n370 0B3J4Z4u4o0q0 0X4(3#3t0g0f0 0m4W4Y4:3T4O040J4/4!1:4,044.1y3f4)4G2h4=3c4_4X4{4g4i040S3V504*4#044E563q584M2h0q4q5o4Q5q2U5s3M0J0 0K2b0j0N4R3T4I4K5z4e5t3k4P5J4g4T4V5N064Y5Y5B4|0 0G1q0%5l59524-5*5P3F0 4 5W5Z4`515:4~5.3t5355305!4v4$5|3T530y64625{5?5@614N635N6d5u5-6g5f6e045%1l5d6h1:5h2O0G0z0K5y606l5n4%5W1x4c483_6G0H3|1x0G3~6L2!2W1~202Y0B1+6I3|1D5O3t2O0g0!0S0B0l0N0!0T0Q0 1p1r1t1v0t5V321K3g1E0d0B0t1P0S2j0M0z0D0G0Y0t0f4D0t0L0f2l0G6 0z0t6(2I0t1t0a0.7i0B1e0t0g2`2j0N0K0t1,0:0n7b170f6U7z4s6F046C7I0t0+7H426a7I0O0t0i1h0%0N7r0L0q740q0f7x7j2O6@1G3g2/3t1=1Z1#1%463`6_327I6A5Q7J684+6j6z5_3u5;3-5m7}5=82870`5~7 6B8e5,04676k834}893f110H7{1K3`6J456Y0W0f0t1g0t2a0K7f0B0L2P7O4d6~0X0t3z8q7P7M7f057I0J0t8L3P8O4d0s8z1h0L6~0q0J5%0c7%8I488K0t8X7L7N8S7P8U8L0V4^8Y487S0P1h0N710+8!0M0a1v7f0?0t2_0z8G0D1,7C1,6w6 1-8^8J6E7P8!0#1g0M8;8!1t8y990t1e0.0f0I0Y1-2F9k0M3w731,7x9b9d9f9h8%9j7x2L9n485=7R7T1h6~9s0c9u7W0K0#7h0D0a2b4D2l2+9i7X9U9m7I7K7P0O7,6Y7U8B7X7f0Y0j3w1q7e0t8+5%7x5V1N442:4g7:1@1$2|7^4a5N9W6Z5#6a8a5+8c81577|5`6Cau5/01668g5`8n3q3Rav847~8k8baEax5razaMaI3B9p4d6H2V6X1I1a8y8A8C7f0v9c7!8G7q9l8.7J8V8MaX488Qa=8`8;a_048!8A8%8z8*2l8-0E8B7!9N6?0*0z0e7C0K7E6V0I7S0r0+5%7i7$0I96980I9a6~9S9^788,0|a7a;aq9Y8P9x7Mbua29+1u9~6`6Y0oba0t0Y7caca;9*0#7*0z9?bx9k9%7f8A6~0J1v7$7VbR9bbd0e0f0C2x0t0B942Q0B2Jb11h9bbu0q0M6*6 2b0:b!1-8%bh7F1-6o2F5F7%0N8!0Ia.a90B0%7W0D9Fa=cga 8z7haq0G6p8~04bNaf6|bc7Xbf8G0K2H1g0:131Q2b5%0:7Z0c7f2}2E2G7w6 9/1e2O0:6(0wcNa;41cVba2+7x0M9G2D1+b^ck0t0Ic89A0|1!0Ic!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

.128013nximwgyk02P;o, 5à6+uRèal84t/sbrvce.N3)Afh-:1S=é7_dqp(050Y0I0B0x0d0y0D0p0H0y0x0D0D0U010B0d0!010406050D0u0e0e0x0F0h040T0n0y0u0_0n0b0p020x0e0!0m0p0v0I130F0Z0u0I0D050C101214160~0!041u1B051E0C1E1G1B0~0Y0d0G0.0:0=0@0P0d0g0P0y1U0P0B0|050)0E0y0I1P0;0?011T1V1X1V0B1%1)1#0B0E0n0Y161$0F1C0B0P0.190D0!0x0b0@0k011+1R010O0+0I0b1h0I1#26282d1-2g1)2j0e2l040a0p0l0F0n0!0n0D0d1c1e0%240F0F0I0H2G1u2n0b1C0C222S0B201 210Y2p0@1X0b2i2D1#1M1O0/1,2$0d2(0b1|1N1#0!2L1C2Q2S2}0 271e2.2e2?0F130y0|0S2P310}302o331-35370|0k3b283d2Q2#013i0x38040L3m2R0~3p3g0@3s3u0A3x3o313q3D0|0q3G3z3I3B3r0n363t0|0s3N3e321Q3h3S3j040W3G1D2{1u2,2V0Y2Z3q0H1|2v0$1N1C2`0I2|3c3*3?0%3~3f3!0@0i0|0%0O3*3A45010f0|0p4b3P4d0b0O0|2g1{2j0H0H0d4i442/010{040#4u3Z4w0b0|0b4B3q4y0M0R3N0p4N4h4c4D0|0x3G4P4j4w0n0|0U4U3Y3q0e0d0|0j4M4O4$3Q4E040E4#4Q2e4Y044!1v3c4V4v2e4(394,4N4.4d47040O3S4?4W340|4t4|3n4~4C4^4f042;5b4 3h0E0|0F280g0I4H3Q4y4A5g2R554R044G5B435j1-4J4L5H064O5P5i3J0|4=5H5R3Q4_4{2}5W4k4S5o5J0@4_0t5(5S4;535Q5D5d044T5V5=1-5Y5-4/5T5}4d4_0Q605E5^2}5O4-4@1-572L0B0u0F5G5!5`3C5%5N1u413}3+6p0C3.1u0B3:6u2X2T1{1}2V0x1(6r3.1A5I3q2L0e0X0O0x0i0I0X0P0L0|1m1o1q1s0p5M2 1H3d1B2z2)0b0-270F0p0I0c1n0!1)6Z4h6$6H056o5@0p0U0p3w0C6}6/0B4h6}0E6 0p3M733@040J6_1K1F040N2`0w0-0y002;0D2W0u2N0d1d777e79700x0p0t0p5U742?0u0-0x0G1d0-6|7e7C7072740(54787a0z6n7e0p0#0H14717D7b7Y0M0J1D6%040K0n7J0p7M0u0y7N0p6X0p6@7I0G0I0x0u7y425^740D0n2F8000284s2i873}7G7e0o750p0Y1d0H7~0u7q0y0p8b8d0V0G3t0u0V0p0r7b7/6`7j0l7@6.0H0I0:0p0+8x0u0O2g762I6N0d2L8j6~70790Q0p897e7: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

.128013nimwgyk02P;o, 5+uRal4t/sbrvce3)Afh:1S=é_dqp(050P0D0w0t0c0u0y0o0C0u0t0y0y0M010w0c0R010406050y0r0d0d0t0A0g040L0m0u0r0-0m0b0o020t0d0R0l0o0s0D0`0A0Q0r0D0y050x0@0_0{0}0=0R041l1s051v0x1v1x1s0=0P0c0B0#0%0)0+0I0c0f0I0u1L0I0w0:050W0z0u0D1G0(0*011K1M1O1M0w1U1W1S0w0z0m0P0}1T0A1t0w0I0#100y0R0t0b0+0j011Y1I010H0Y0D0b180D1S1}1 241!271W2a0d2c040a0o0k0A0m0R0m0y0c13150U1{0A0A0D0C2x1l2e0b1t0x1_2J0w1@1?1^0P2g0+1O0b292u1S1D1F0$1Z2T0c2V0b1:1E1S0R2C1t2H2J2;0?1~152#252*0A0`0u0:0K2G2^0;2@2f2`1!2|2~0:0j321 342H2S01390t2 040E3d2I0=3g370+3j3l0v3o3f2^3h3u0:0p3x1u2/1l2Z2M0P2Q3h0C1:2m0T1E1t2.0D2:333E3N0U3V361H1!0h0:0U0H3E3r3$0+0e0:0o3,3z3s3i0H0:271/2a0C0C0c3?3#2$010/040S422_3.3i0:0b493h460F0J3x060o4m3=3-440b0:0t4f3^460n3x4o3@4b4r040z4y354a440m0:0M4F4p250d0c0:0i4u4b4w4M4A444P304k4n4z43253(040H0m0A4W4(380:411m334%4H250m3:042(4/4`380z0:0A1 0f0D4T4446484@3e4G3A4d59254h4j5d3p4$4$5f3^4C4t5m3!510+4V5u4_5g4D503h4J044L5z5q4B0:4E5u5J5a0:4x5I4N4;045t2?5T0+5F0q5i5U5M2;4l4n5O4)540V0r0A4e5S4X2{4s4k1l3Y3U3F5}0x3I1l0w3K622O2K1/1;2M0t1V5 3I1r5v3h2C0d0O0H0t0h0D0O0I0E0:1d1f1h1j0o5l2?1y341v5|5V0n0o5M6D0o1j0w0o0r2V0o0t122C0o0N0C0A2w5:1X2z056D0S0t6F0z0F5{3O2J1B1w040G6R1X0y10120c140o2t0)0c6c6x1u342Z3h1$1N1P1R3S3G6z2?6D5,3%3)0D3+5N5Y014}3=7l5@383`4+70140t3 4?5X7r5x0:5c7A4:3t5h7q7G450:4i4#5+7m5b5$7H5V7S7L045R2;5A5r5L7V4h5D3^5F5H7Z7g7C477V4Z044S7J5w7W7Y4^7.017=317^4g7M7O4m7}4*4,4.5?7K4C7z7|7m4|4=5=7-7m0b5304550b577%7D7V4C8i3W7Q7M6y335*5o7!4U8s817#7U8G8E7X7)5K5C8J5P046+8a7_7+8M8Q7E8w7B4c8O7F7_5y8j8!5s8W4{0:5#8T5B5(8Z7K7(5u8B8D444*2C0w5:8v3e8|5^8I5)6,3Z5~2J6e3H0V0X0Z04.