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.128013bàuSç,3_è4l.(wnx/R8p)OaPkL0é;:EhorCs1v7c25qm6gydieft =+050X0Z0#0y0Y0m0L0$0P0m0y0L0L0%010#0Y0v010406050L0e0T0T0y0J0W040f0I0m0e0|0I0q0$020y0T0v0E0$0t0Z160J0S0e0Z0L050s13151719110v041x1E051H0s1H1J1E110X0Y0N0;0?0^0`0H0Y0V0H0m1X0H0#0 050,0c0m0Z1S0@0_011W1Y1!1Y0#1*1,1(0#0c0I0X191)0J1F0#0H0;1c0L0v0y0q0`0Q011.1U010!0.0Z0q1k0Z1(292b2g1:2j1,2m0T2o040b0$0z0J0I0v0I0L0Y1f1h0*270J0J0Z0P2J1x2q0q1F0s252V0#2322240X2s0`1!0q2l2G1(1P1R0=1/2)0Y2+0q1 1Q1(0v2O1F2T2V30122a1h2;2h2_0J160m0 0M2S3410332r361:383a0 0Q3e2b3g2T2(013l0y3b040i3p2U113s3j0`3v3x0l3A3r343t3G0 0R3J3C3L3E3u0I393w0 0U3Q3h351T3k3V3m040O3!3D3%3F3)3X040u3J1G2~1x2/2Y0X2$3t0P1 2y0)1Q1F2}0Z2 3f3^410*493i3/010A0 0*0!3^3.2=010p0 0$4m3S4g0q0!0 2j1~2m0P0P0Y4t4f4o0~040o4F3$4o0q0 0q4L3t4I0w0F3Q0$4X4s4n370 0y3J4Z4u4o0I0 0%4(3#3t0T0Y0 0C4W4Y4:3T4O040c4/4!1:4,044.1y3f4)4G2h4=3c4_4X4{4g4i040!3V504*4#044E563q584M2h0I4q5o4Q5q2U5s3M0c0 0J2b0V0Z4R3T4I4K5z4e5t3k4P5J4g4T4V5N064Y5Y5B4|0 0#1q0v5l59524-5*5P3F0 4 5W5Z4`515:4~5.3t5355305!4v4$5|3T530(64625{5?5@614N635N6d5u5-6g5f6e045%1l5d6h1:5h2O0#0e0J5y606l5n4%5W1x4c483_6G0s3|1x0#3~6L2!2W1~202Y0y1+6I3|1D5O3t2O0T0j0!0y0A0Z0j0H0i0 1p1r1t1v0$5V321K3g1E0B0y0$1P0!2j0P0e0m0#0D0$0Y4D0$0N0Y2l0#6 0e0$6(2I0$1t0a0.7i0y1e0$0T2`2j0Z0J0$1,0:0Q7b170Y6U7z4s6F046C7I0$0+7H426a7I0n0$0x1h0v0Z7r0N0I740I0Y7x7j2O6@1G3g2/3t1=1Z1#1%463`6_327I6A5Q7J684+6j6z5_3u5;3-5m7}5=82870`5~7 6B8e5,04676k834}893f110s7{1K3`6J456Y0f0Y0$1g0$2a0J7f0y0N2P7O4d6~0%0$3z8q7P7M7f057I0c0$8L3P8O4d0h8z1h0N6~0I0c5%0q7%8I488K0$8X7L7N8S7P8U8L0M4^8Y487S0G1h0Z710+8!0P0a1v7f0?0$2_0e8G0m1,7C1,6w6 1-8^8J6E7P8!0X1g0P8;8!1t8y990$1e0.0Y0L0D1-2F9k0P3w731,7x9b9d9f9h8%9j7x2L9n485=7R7T1h6~9s0q9u7W0J0X7h0m0a2b4D2l2+9i7X9U9m7I7K7P0n7,6Y7U8B7X7f0D0V3w1q7e0$8+5%7x5V1N442:4g7:1@1$2|7^4a5N9W6Z5#6a8a5+8c81577|5`6Cau5/01668g5`8n3q3Rav847~8k8baEax5razaMaI3B9p4d6H2V6X1I1a8y8A8C7f0d9c7!8G7q9l8.7J8V8MaX488Qa=8`8;a_048!8A8%8z8*2l8-0u8B7!9N6?0*0e0r7C0J7E6V0L7S0K0+5%7i7$0L96980L9a6~9S9^788,0|a7a;aq9Y8P9x7Mbua29+1u9~6`6Y0zba0$0D7caca;9*0X7*0e9?bx9k9%7f8A6~0c1v7$7VbR9bbd0r0Y0k2x0$0y942Q0y2Jb11h9bbu0I0P6*6 2b0:b!1-8%bh7F1-6o2F5F7%0Z8!0La.a90y0v7W0m9Fa=cga 8z7haq0#6p8~04bNaf6|bc7Xbf8G0J2H1g0:131Q2b5%0:7Z0q7f2}2E2G7w6 9/1e2O0:6(0gcNa;41cVba2+7x0P9G2D1+b^ck0$0Lc89A0|1!0Lc!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

.128013bàuS-,3_è4l.(wnx/R)p8aPké0;:hors1v7c25qm6AgydieNft =+050T0V0Y0w0U0l0G0Z0K0l0w0G0G0!010Y0U0u010406050G0d0O0O0w0F0S040e0E0l0d0_0E0p0Z020w0O0u0B0Z0s0V130F0N0d0V0G050r101214160~0u041u1B051E0r1E1G1B0~0T0U0I0.0:0=0@0D0U0R0D0l1U0D0Y0|050)0b0l0V1P0;0?011T1V1X1V0Y1%1)1#0Y0b0E0T161$0F1C0Y0D0.190G0u0w0p0@0L011+1R010X0+0V0p1h0V1#26282d1-2g1)2j0O2l040a0Z0x0F0E0u0E0G0U1c1e0%240F0F0V0K2G1u2n0p1C0r222S0Y201 210T2p0@1X0p2i2D1#1M1O0/1,2$0U2(0p1|1N1#0u2L1C2Q2S2}0 271e2.2e2?0F130l0|0H2P310}302o331-35370|0L3b283d2Q2#013i0w38040h3m2R0~3p3g0@3s3u0k3x3o313q3D0|0M3G3z3I3B3r0E363t0|0P3N3e321Q3h3S3j040J3G1D2{1u2,2V0T2Z3q0K1|2v0$1N1C2`0V2|3c3*3?0%3~3f3!0@0y0|0%0X3*3A45010o0|0Z4b3P4d0p0X0|2g1{2j0K0K0U4i442/010{040n4u3Z4w0p0|0p4B3q4y0t0C3N0Z4N4h4c4D0|0w3G4P4j4w0E0|0!4U3Y3q0O0U0|0A4M4O4$3Q4E040b4#4Q2e4Y044!1v3c4V4v2e4(394,4N4.4d47040X3S4?4W340|4t4|3n4~4C4^4f042;5b4 3h0b0|0F280R0V4H3Q4y4A5g2R554R044G5B435j1-4J4L5H064O5P5i3J0|4=5H5R3Q4_4{2}5W4k4S5o5J0@4_0#5(5S4;535Q5D5d044T5V5=1-5Y5-4/5T5}4d4_0f605E5^2}5O4-4@1-572L0Y0d0F5G5!5`3C5%5N1u413}3+6p0r3.1u0Y3:6u2X2T1{1}2V0w1(6r3.1A5I3q2L0O0i0X0w0y0V0i0D0h0|1m1o1q1s0Z5M2 1H3d1B2z2)0p0-270F0Z0V0q1n0u1)6Z4h6$6H056o5@0Z0!0Z3w0r6}6/0Y4h6}0b6 0Z3M733@040m6_1K1F040Q2`0j0-0l002;0G2W0d2N0U1d777e79700w0Z0#0Z5U742?0d0-0w0I1d0-6|7e7C7072740(54787a0v6n7e0Z0n0K14717D7b7Y0t0m1D6%040W0E7J0Z7M0d0l7N0Z6X0Z6@7I0I0V0w0d7y425^740G0E2F8000284s2i873}7G7e0g750Z0T1d0K7~0d7q0l0Z8b8d0z0I3t0d0z0Z0c7b7/6`7j0x7@6.0K0V0:0Z0+8x0d0X2g762I6N0U2L8j6~70790f0Z897e7: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

.128013buS,3_4l(wn/R)paPké0;:hors1vc25qmAgydieft =+050L0N0P0q0M0i0A0Q0D0i0q0A0A0R010P0M0p010406050A0c0H0H0q0z0K040d0y0i0c0-0y0l0Q020q0H0p0v0Q0n0N0`0z0G0c0N0A050m0@0_0{0}0=0p041l1s051v0m1v1x1s0=0L0M0C0#0%0)0+0x0M0J0x0i1L0x0P0:050W0b0i0N1G0(0*011K1M1O1M0P1U1W1S0P0b0y0L0}1T0z1t0P0x0#100A0p0q0l0+0E011Y1I010O0Y0N0l180N1S1}1 241!271W2a0H2c040a0Q0r0z0y0p0y0A0M13150U1{0z0z0N0D2x1l2e0l1t0m1_2J0P1@1?1^0L2g0+1O0l292u1S1D1F0$1Z2T0M2V0l1:1E1S0p2C1t2H2J2;0?1~152#252*0z0`0i0:0B2G2^0;2@2f2`1!2|2~0:0E321 342H2S01390q2 040f3d2I0=3g370+3j3l0h3o3f2^3h3u0:0F3x1u2/1l2Z2M0L2Q3h0D1:2m0T1E1t2.0N2:333E3N0U3V361H1!0s0:0U0O3E3r3$0+0k0:0Q3,3z3s3i0O0:271/2a0D0D0M3?3#2$010/040j422_3.3i0:0l493h460o0w3x060Q4m3=3-440l0:0q4f3^460e3x4o3@4b4r040b4y354a440y0:0R4F4p250H0M0:0u4u4b4w4M4A444P304k4n4z43253(040O0y0z4W4(380:411m334%4H250y3:042(4/4`380b0:0z1 0J0N4T4446484@3e4G3A4d59254h4j5d3p4$4$5f3^4C4t5m3!510+4V5u4_5g4D503h4J044L5z5q4B0:4E5u5J5a0:4x5I4N4;045t2?5T0+5F0S5i5U5M2;4l4n5O4)540V0c0z4e5S4X2{4s4k1l3Y3U3F5}0m3I1l0P3K622O2K1/1;2M0q1V5 3I1r5v3h2C0H0g0O0q0s0N0g0x0f0:1d1f1h1j0Q5l2?1y341v5|5V0e0Q5M6D0Q1j0P0Q0c2V0Q0q122C0Q0t0D0z2w5:1X2z056D0j0q6F0b0o5{3O2J1B1w040I6R1X0A10120M140Q2t0)0M6c6x1u342Z3h1$1N1P1R3S3G6z2?6D5,3%3)0N3+5N5Y014}3=7l5@383`4+70140q3 4?5X7r5x0:5c7A4:3t5h7q7G450:4i4#5+7m5b5$7H5V7S7L045R2;5A5r5L7V4h5D3^5F5H7Z7g7C477V4Z044S7J5w7W7Y4^7.017=317^4g7M7O4m7}4*4,4.5?7K4C7z7|7m4|4=5=7-7m0l5304550l577%7D7V4C8i3W7Q7M6y335*5o7!4U8s817#7U8G8E7X7)5K5C8J5P046+8a7_7+8M8Q7E8w7B4c8O7F7_5y8j8!5s8W4{0:5#8T5B5(8Z7K7(5u8B8D444*2C0P5:8v3e8|5^8I5)6,3Z5~2J6e3H0V0X0Z04.