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

.128013.8217s3Oo_;8èbcdufvg/0lyàq n7apS.r1Lmeh(P2=4:+,Ctwkiç5REx)é6050m0I0T0A0W0t0c0x0l0t0A0c0c0N010T0W0B010406050c0n0H0H0A0E0u040C0f0t0n0|0f0y0x020A0H0B0h0x0Z0I160E0w0n0I0c050r13151719110B041x1E051H0r1H1J1E110m0W0p0;0?0^0`0J0W0q0J0t1X0J0T0 050,0k0t0I1S0@0_011W1Y1!1Y0T1*1,1(0T0k0f0m191)0E1F0T0J0;1c0c0B0A0y0`0M011.1U010o0.0I0y1k0I1(292b2g1:2j1,2m0H2o040a0x0L0E0f0B0f0c0W1f1h0*270E0E0I0l2J1x2q0y1F0r252V0T2322240m2s0`1!0y2l2G1(1P1R0=1/2)0W2+0y1 1Q1(0B2O1F2T2V30122a1h2;2h2_0E160t0 0F2S3410332r361:383a0 0M3e2b3g2T2(013l0A3b040d3p2U113s3j0`3v3x0O3A3r343t3G0 0Y3J3C3L3E3u0f393w0 0(3Q3h351T3k3V3m040z3!3D3%3F3)3X040i3J1G2~1x2/2Y0m2$3t0l1 2y0)1Q1F2}0I2 3f3^410*493i3/010V0 0*0o3^3.2=010U0 0x4m3S4g0y0o0 2j1~2m0l0l0W4t4f4o0~040K4F3$4o0y0 0y4L3t4I0$0P3Q0x4X4s4n370 0A3J4Z4u4o0f0 0N4(3#3t0H0W0 0s4W4Y4:3T4O040k4/4!1:4,044.1y3f4)4G2h4=3c4_4X4{4g4i040o3V504*4#044E563q584M2h0f4q5o4Q5q2U5s3M0k0 0E2b0q0I4R3T4I4K5z4e5t3k4P5J4g4T4V5N064Y5Y5B4|0 0T1q0B5l59524-5*5P3F0 4 5W5Z4`515:4~5.3t5355305!4v4$5|3T530Q64625{5?5@614N635N6d5u5-6g5f6e045%1l5d6h1:5h2O0T0n0E5y606l5n4%5W1x4c483_6G0r3|1x0T3~6L2!2W1~202Y0A1+6I3|1D5O3t2O0H0g0o0A0V0I0g0J0d0 1p1r1t1v0x5V321K3g1E0G0A0x1P0o2j0l0n0t0T0%0x0W4D0x0p0W2l0T6 0n0x6(2I0x1t0b0.7i0A1e0x0H2`2j0I0E0x1,0:0M7b170W6U7z4s6F046C7I0x0+7H426a7I0D0x0e1h0B0I7r0p0f740f0W7x7j2O6@1G3g2/3t1=1Z1#1%463`6_327I6A5Q7J684+6j6z5_3u5;3-5m7}5=82870`5~7 6B8e5,04676k834}893f110r7{1K3`6J456Y0C0W0x1g0x2a0E7f0A0p2P7O4d6~0N0x3z8q7P7M7f057I0k0x8L3P8O4d0R8z1h0p6~0f0k5%0y7%8I488K0x8X7L7N8S7P8U8L0F4^8Y487S0!1h0I710+8!0l0b1v7f0?0x2_0n8G0t1,7C1,6w6 1-8^8J6E7P8!0m1g0l8;8!1t8y990x1e0.0W0c0%1-2F9k0l3w731,7x9b9d9f9h8%9j7x2L9n485=7R7T1h6~9s0y9u7W0E0m7h0t0b2b4D2l2+9i7X9U9m7I7K7P0D7,6Y7U8B7X7f0%0q3w1q7e0x8+5%7x5V1N442:4g7:1@1$2|7^4a5N9W6Z5#6a8a5+8c81577|5`6Cau5/01668g5`8n3q3Rav847~8k8baEax5razaMaI3B9p4d6H2V6X1I1a8y8A8C7f0v9c7!8G7q9l8.7J8V8MaX488Qa=8`8;a_048!8A8%8z8*2l8-0i8B7!9N6?0*0n0#7C0E7E6V0c7S0S0+5%7i7$0c96980c9a6~9S9^788,0|a7a;aq9Y8P9x7Mbua29+1u9~6`6Y0Lba0x0%7caca;9*0m7*0n9?bx9k9%7f8A6~0k1v7$7VbR9bbd0#0W0j2x0x0A942Q0A2Jb11h9bbu0f0l6*6 2b0:b!1-8%bh7F1-6o2F5F7%0I8!0ca.a90A0B7W0t9Fa=cga 8z7haq0T6p8~04bNaf6|bc7Xbf8G0E2H1g0:131Q2b5%0:7Z0y7f2}2E2G7w6 9/1e2O0:6(0XcNa;41cVba2+7x0l9G2D1+b^ck0x0cc89A0|1!0cc!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

.128013s3o_;è8bcdufvg/0lyàq n7AapS.r1-meh,(P2=4:+Ntwki5Rx)é6050k0H0S0z0V0r0b0v0j0r0z0b0b0N010S0V0A010406050b0l0G0G0z0D0s040B0d0r0l0_0d0w0v020z0G0A0f0v0X0H130D0u0l0H0b050p101214160~0A041u1B051E0p1E1G1B0~0k0V0n0.0:0=0@0I0V0o0I0r1U0I0S0|050)0i0r0H1P0;0?011T1V1X1V0S1%1)1#0S0i0d0k161$0D1C0S0I0.190b0A0z0w0@0M011+1R010m0+0H0w1h0H1#26282d1-2g1)2j0G2l040a0v0L0D0d0A0d0b0V1c1e0%240D0D0H0j2G1u2n0w1C0p222S0S201 210k2p0@1X0w2i2D1#1M1O0/1,2$0V2(0w1|1N1#0A2L1C2Q2S2}0 271e2.2e2?0D130r0|0E2P310}302o331-35370|0M3b283d2Q2#013i0z38040c3m2R0~3p3g0@3s3u0O3x3o313q3D0|0W3G3z3I3B3r0d363t0|0#3N3e321Q3h3S3j040x3G1D2{1u2,2V0k2Z3q0j1|2v0$1N1C2`0H2|3c3*3?0%3~3f3!0@0U0|0%0m3*3A45010T0|0v4b3P4d0w0m0|2g1{2j0j0j0V4i442/010{040K4u3Z4w0w0|0w4B3q4y0Z0P3N0v4N4h4c4D0|0z3G4P4j4w0d0|0N4U3Y3q0G0V0|0q4M4O4$3Q4E040i4#4Q2e4Y044!1v3c4V4v2e4(394,4N4.4d47040m3S4?4W340|4t4|3n4~4C4^4f042;5b4 3h0i0|0D280o0H4H3Q4y4A5g2R554R044G5B435j1-4J4L5H064O5P5i3J0|4=5H5R3Q4_4{2}5W4k4S5o5J0@4_0Q5(5S4;535Q5D5d044T5V5=1-5Y5-4/5T5}4d4_0F605E5^2}5O4-4@1-572L0S0l0D5G5!5`3C5%5N1u413}3+6p0p3.1u0S3:6u2X2T1{1}2V0z1(6r3.1A5I3q2L0G0e0m0z0U0H0e0I0c0|1m1o1q1s0v5M2 1H3d1B2z2)0w0-270D0v0H0Y1n0A1)6Z4h6$6H056o5@0v0N0v3w0p6}6/0S4h6}0i6 0v3M733@040C6_1K1F040y2`0g0-0r002;0b2W0l2N0V1d777e79700z0v0Q0v5U742?0l0-0z0n1d0-6|7e7C7072740(54787a0h6n7e0v0K0j14717D7b7Y0Z0C1D6%040R0d7J0v7M0l0r7N0v6X0v6@7I0n0H0z0l7y425^740b0d2F8000284s2i873}7G7e0J750v0k1d0j7~0l7q0r0v8b8d0!0n3t0l0!0v0t7b7/6`7j0L7@6.0j0H0:0v0+8x0l0m2g762I6N0V2L8j6~70790F0v897e7: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

.128013s3o_;bcdufvg/0lyq nAapSr1meh,(P2=4:+twki5R)é050i0B0L0v0O0p0b0s0h0p0v0b0b0H010L0O0w010406050b0j0A0A0v0y0q040x0d0p0j0-0d0t0s020v0A0w0f0s0Q0B0`0y0r0j0B0b050n0@0_0{0}0=0w041l1s051v0n1v1x1s0=0i0O0l0#0%0)0+0C0O0m0C0p1L0C0L0:050W0g0p0B1G0(0*011K1M1O1M0L1U1W1S0L0g0d0i0}1T0y1t0L0C0#100b0w0v0t0+0G011Y1I010k0Y0B0t180B1S1}1 241!271W2a0A2c040a0s0F0y0d0w0d0b0O13150U1{0y0y0B0h2x1l2e0t1t0n1_2J0L1@1?1^0i2g0+1O0t292u1S1D1F0$1Z2T0O2V0t1:1E1S0w2C1t2H2J2;0?1~152#252*0y0`0p0:0z2G2^0;2@2f2`1!2|2~0:0G321 342H2S01390v2 040c3d2I0=3g370+3j3l0I3o3f2^3h3u0:0P3x1u2/1l2Z2M0i2Q3h0h1:2m0T1E1t2.0B2:333E3N0U3V361H1!0N0:0U0k3E3r3$0+0M0:0s3,3z3s3i0k0:271/2a0h0h0O3?3#2$010/040E422_3.3i0:0t493h460R0J3x060s4m3=3-440t0:0v4f3^460D3x4o3@4b4r040g4y354a440d0:0H4F4p250A0O0:0o4u4b4w4M4A444P304k4n4z43253(040k0d0y4W4(380:411m334%4H250d3:042(4/4`380g0:0y1 0m0B4T4446484@3e4G3A4d59254h4j5d3p4$4$5f3^4C4t5m3!510+4V5u4_5g4D503h4J044L5z5q4B0:4E5u5J5a0:4x5I4N4;045t2?5T0+5F0K5i5U5M2;4l4n5O4)540V0j0y4e5S4X2{4s4k1l3Y3U3F5}0n3I1l0L3K622O2K1/1;2M0v1V5 3I1r5v3h2C0A0e0k0v0N0B0e0C0c0:1d1f1h1j0s5l2?1y341v5|5V0D0s5M6D0s1j0L0s0j2V0s0v122C0s0S0h0y2w5:1X2z056D0E0v6F0g0R5{3O2J1B1w040u6R1X0b10120O140s2t0)0O6c6x1u342Z3h1$1N1P1R3S3G6z2?6D5,3%3)0B3+5N5Y014}3=7l5@383`4+70140v3 4?5X7r5x0:5c7A4:3t5h7q7G450:4i4#5+7m5b5$7H5V7S7L045R2;5A5r5L7V4h5D3^5F5H7Z7g7C477V4Z044S7J5w7W7Y4^7.017=317^4g7M7O4m7}4*4,4.5?7K4C7z7|7m4|4=5=7-7m0t5304550t577%7D7V4C8i3W7Q7M6y335*5o7!4U8s817#7U8G8E7X7)5K5C8J5P046+8a7_7+8M8Q7E8w7B4c8O7F7_5y8j8!5s8W4{0:5#8T5B5(8Z7K7(5u8B8D444*2C0L5:8v3e8|5^8I5)6,3Z5~2J6e3H0V0X0Z04.