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.1280135tf4)+2rR3,sao iug0xè8àm1P6pOnCEl7h.e=cLéy:v(wq;S/b_dkç050$0M0d0o0r0I0n0q0O0I0o0n0n0N010d0r0D010406050n0s0z0z0o0j0R040Y0p0I0s0|0p0F0q020o0z0D0X0q0k0M160j0W0s0M0n050Z13151719110D041x1E051H0Z1H1J1E110$0r0T0;0?0^0`0K0r0t0K0I1X0K0d0 050,0!0I0M1S0@0_011W1Y1!1Y0d1*1,1(0d0!0p0$191)0j1F0d0K0;1c0n0D0o0F0`0i011.1U010e0.0M0F1k0M1(292b2g1:2j1,2m0z2o040b0q0B0j0p0D0p0n0r1f1h0*270j0j0M0O2J1x2q0F1F0Z252V0d2322240$2s0`1!0F2l2G1(1P1R0=1/2)0r2+0F1 1Q1(0D2O1F2T2V30122a1h2;2h2_0j160I0 0A2S3410332r361:383a0 0i3e2b3g2T2(013l0o3b040l3p2U113s3j0`3v3x0f3A3r343t3G0 0c3J3C3L3E3u0p393w0 0C3Q3h351T3k3V3m040J3!3D3%3F3)3X040x3J1G2~1x2/2Y0$2$3t0O1 2y0)1Q1F2}0M2 3f3^410*493i3/010%0 0*0e3^3.2=010V0 0q4m3S4g0F0e0 2j1~2m0O0O0r4t4f4o0~040U4F3$4o0F0 0F4L3t4I0g0S3Q0q4X4s4n370 0o3J4Z4u4o0p0 0N4(3#3t0z0r0 0u4W4Y4:3T4O040!4/4!1:4,044.1y3f4)4G2h4=3c4_4X4{4g4i040e3V504*4#044E563q584M2h0p4q5o4Q5q2U5s3M0!0 0j2b0t0M4R3T4I4K5z4e5t3k4P5J4g4T4V5N064Y5Y5B4|0 0d1q0D5l59524-5*5P3F0 4 5W5Z4`515:4~5.3t5355305!4v4$5|3T530h64625{5?5@614N635N6d5u5-6g5f6e045%1l5d6h1:5h2O0d0s0j5y606l5n4%5W1x4c483_6G0Z3|1x0d3~6L2!2W1~202Y0o1+6I3|1D5O3t2O0z0#0e0o0%0M0#0K0l0 1p1r1t1v0q5V321K3g1E0P0o0q1P0e2j0O0s0I0d0Q0q0r4D0q0T0r2l0d6 0s0q6(2I0q1t0a0.7i0o1e0q0z2`2j0M0j0q1,0:0i7b170r6U7z4s6F046C7I0q0+7H426a7I0L0q0E1h0D0M7r0T0p740p0r7x7j2O6@1G3g2/3t1=1Z1#1%463`6_327I6A5Q7J684+6j6z5_3u5;3-5m7}5=82870`5~7 6B8e5,04676k834}893f110Z7{1K3`6J456Y0Y0r0q1g0q2a0j7f0o0T2P7O4d6~0N0q3z8q7P7M7f057I0!0q8L3P8O4d0m8z1h0T6~0p0!5%0F7%8I488K0q8X7L7N8S7P8U8L0A4^8Y487S0H1h0M710+8!0O0a1v7f0?0q2_0s8G0I1,7C1,6w6 1-8^8J6E7P8!0$1g0O8;8!1t8y990q1e0.0r0n0Q1-2F9k0O3w731,7x9b9d9f9h8%9j7x2L9n485=7R7T1h6~9s0F9u7W0j0$7h0I0a2b4D2l2+9i7X9U9m7I7K7P0L7,6Y7U8B7X7f0Q0t3w1q7e0q8+5%7x5V1N442:4g7:1@1$2|7^4a5N9W6Z5#6a8a5+8c81577|5`6Cau5/01668g5`8n3q3Rav847~8k8baEax5razaMaI3B9p4d6H2V6X1I1a8y8A8C7f0y9c7!8G7q9l8.7J8V8MaX488Qa=8`8;a_048!8A8%8z8*2l8-0x8B7!9N6?0*0s0v7C0j7E6V0n7S0G0+5%7i7$0n96980n9a6~9S9^788,0|a7a;aq9Y8P9x7Mbua29+1u9~6`6Y0Bba0q0Q7caca;9*0$7*0s9?bx9k9%7f8A6~0!1v7$7VbR9bbd0v0r0w2x0q0o942Q0o2Jb11h9bbu0p0O6*6 2b0:b!1-8%bh7F1-6o2F5F7%0M8!0na.a90o0D7W0I9Fa=cga 8z7haq0d6p8~04bNaf6|bc7Xbf8G0j2H1g0:131Q2b5%0:7Z0F7f2}2E2G7w6 9/1e2O0:6(0(cNa;41cVba2+7x0O9G2D1+b^ck0q0nc89A0|1!0nc!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

.1280135tf4)+2rR3,sa-o iug0xè8àm1P6pNnl7h.e=céy:vA(wq;S/b_dk050!0K0c0n0r0G0m0q0M0G0n0m0m0L010c0r0D010406050m0s0z0z0n0i0O040W0p0G0s0_0p0F0q020n0z0D0V0q0j0K130i0U0s0K0m050X101214160~0D041u1B051E0X1E1G1B0~0!0r0Q0.0:0=0@0I0r0t0I0G1U0I0c0|050)0Y0G0K1P0;0?011T1V1X1V0c1%1)1#0c0Y0p0!161$0i1C0c0I0.190m0D0n0F0@0h011+1R010d0+0K0F1h0K1#26282d1-2g1)2j0z2l040a0q0B0i0p0D0p0m0r1c1e0%240i0i0K0M2G1u2n0F1C0X222S0c201 210!2p0@1X0F2i2D1#1M1O0/1,2$0r2(0F1|1N1#0D2L1C2Q2S2}0 271e2.2e2?0i130G0|0A2P310}302o331-35370|0h3b283d2Q2#013i0n38040k3m2R0~3p3g0@3s3u0e3x3o313q3D0|0b3G3z3I3B3r0p363t0|0C3N3e321Q3h3S3j040H3G1D2{1u2,2V0!2Z3q0M1|2v0$1N1C2`0K2|3c3*3?0%3~3f3!0@0#0|0%0d3*3A45010T0|0q4b3P4d0F0d0|2g1{2j0M0M0r4i442/010{040S4u3Z4w0F0|0F4B3q4y0f0P3N0q4N4h4c4D0|0n3G4P4j4w0p0|0L4U3Y3q0z0r0|0u4M4O4$3Q4E040Y4#4Q2e4Y044!1v3c4V4v2e4(394,4N4.4d47040d3S4?4W340|4t4|3n4~4C4^4f042;5b4 3h0Y0|0i280t0K4H3Q4y4A5g2R554R044G5B435j1-4J4L5H064O5P5i3J0|4=5H5R3Q4_4{2}5W4k4S5o5J0@4_0g5(5S4;535Q5D5d044T5V5=1-5Y5-4/5T5}4d4_0o605E5^2}5O4-4@1-572L0c0s0i5G5!5`3C5%5N1u413}3+6p0X3.1u0c3:6u2X2T1{1}2V0n1(6r3.1A5I3q2L0z0Z0d0n0#0K0Z0I0k0|1m1o1q1s0q5M2 1H3d1B2z2)0F0-270i0q0K0v1n0D1)6Z4h6$6H056o5@0q0L0q3w0X6}6/0c4h6}0Y6 0q3M733@040J6_1K1F040R2`0w0-0G002;0m2W0s2N0r1d777e79700n0q0g0q5U742?0s0-0n0Q1d0-6|7e7C7072740(54787a0x6n7e0q0S0M14717D7b7Y0f0J1D6%040E0p7J0q7M0s0G7N0q6X0q6@7I0Q0K0n0s7y425^740m0p2F8000284s2i873}7G7e0l750q0!1d0M7~0s7q0G0q8b8d0N0Q3t0s0N0q0y7b7/6`7j0B7@6.0M0K0:0q0+8x0s0d2g762I6N0r2L8j6~70790o0q897e7: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

.1280135tf4)+2rR3,sao iug0m1Ppnlhe=céy:vA(wq;S/b_dk050R0B0c0n0q0z0m0p0D0z0n0m0m0C010c0q0x010406050m0r0u0u0n0i0F040N0o0z0r0-0o0y0p020n0u0x0M0p0j0B0`0i0L0r0B0m050O0@0_0{0}0=0x041l1s051v0O1v1x1s0=0R0q0H0#0%0)0+0A0q0s0A0z1L0A0c0:050W0P0z0B1G0(0*011K1M1O1M0c1U1W1S0c0P0o0R0}1T0i1t0c0A0#100m0x0n0y0+0h011Y1I010d0Y0B0y180B1S1}1 241!271W2a0u2c040a0p0w0i0o0x0o0m0q13150U1{0i0i0B0D2x1l2e0y1t0O1_2J0c1@1?1^0R2g0+1O0y292u1S1D1F0$1Z2T0q2V0y1:1E1S0x2C1t2H2J2;0?1~152#252*0i0`0z0:0v2G2^0;2@2f2`1!2|2~0:0h321 342H2S01390n2 040k3d2I0=3g370+3j3l0e3o3f2^3h3u0:0b3x1u2/1l2Z2M0R2Q3h0D1:2m0T1E1t2.0B2:333E3N0U3V361H1!0S0:0U0d3E3r3$0+0K0:0p3,3z3s3i0d0:271/2a0D0D0q3?3#2$010/040J422_3.3i0:0y493h460f0G3x060p4m3=3-440y0:0n4f3^460l3x4o3@4b4r040P4y354a440o0:0C4F4p250u0q0:0t4u4b4w4M4A444P304k4n4z43253(040d0o0i4W4(380:411m334%4H250o3:042(4/4`380P0:0i1 0s0B4T4446484@3e4G3A4d59254h4j5d3p4$4$5f3^4C4t5m3!510+4V5u4_5g4D503h4J044L5z5q4B0:4E5u5J5a0:4x5I4N4;045t2?5T0+5F0g5i5U5M2;4l4n5O4)540V0r0i4e5S4X2{4s4k1l3Y3U3F5}0O3I1l0c3K622O2K1/1;2M0n1V5 3I1r5v3h2C0u0Q0d0n0S0B0Q0A0k0:1d1f1h1j0p5l2?1y341v5|5V0l0p5M6D0p1j0c0p0r2V0p0n122C0p0E0D0i2w5:1X2z056D0J0n6F0P0f5{3O2J1B1w040I6R1X0m10120q140p2t0)0q6c6x1u342Z3h1$1N1P1R3S3G6z2?6D5,3%3)0B3+5N5Y014}3=7l5@383`4+70140n3 4?5X7r5x0:5c7A4:3t5h7q7G450:4i4#5+7m5b5$7H5V7S7L045R2;5A5r5L7V4h5D3^5F5H7Z7g7C477V4Z044S7J5w7W7Y4^7.017=317^4g7M7O4m7}4*4,4.5?7K4C7z7|7m4|4=5=7-7m0y5304550y577%7D7V4C8i3W7Q7M6y335*5o7!4U8s817#7U8G8E7X7)5K5C8J5P046+8a7_7+8M8Q7E8w7B4c8O7F7_5y8j8!5s8W4{0:5#8T5B5(8Z7K7(5u8B8D444*2C0c5:8v3e8|5^8I5)6,3Z5~2J6e3H0V0X0Z04.