Énumération des permutations
Nombre factoriel
On note \(n!\) la factorielle d'un entier naturel \(n\) ; c'est le produit des nombres entiers strictement positifs qui sont inférieurs ou égaux à \(n\).
\[n! = 1×2×3×4×...×n\]
- \(0! = 1\), c'est un produit vide, donc égal à \(1\)
- \(1! = 1\), c'est un produit avec \(1\) comme seul facteur.
- \(2! = 1×2 = 2\)
- \(3! = 1×2×3 = 6\)
- \(4! = 1×2×3×4 = 24\)
La factorielle joue un rôle important en algèbre combinatoire. par exemple, il y a \(n!\) façons différentes de permuter \(n\) objets. Elle apparait dans de nombreuses formules en mathématiques, comme la formule du binôme.
Nombre de façons de placer 10 personnes à table
Par exemple, la factorielle 10 exprime le nombre de combinaisons possibles de placement des 10 convives autour d'une table (on dit la permutation des convives). Le premier convive s'installe sur l'une des 10 places à sa disposition. Chacun de ses 10 placements ouvre 9 nouvelles possibilités pour le deuxième convive, celles-ci 8 pour le troisième, et ainsi de suite.
Il y a \(10! = 1×2×3×4×5×6×7×8×9×10 = 3\,628\,800\) façons de placer 10 personnes à table.
Formule récursive
On a \(0! = 1\) et pour \(i>0\) on a \(i! = (i-1)! × i\), comme on peut le constater sur les exemples
- \(5! = 1×2×3×4×5 = 4! × 5\)
- \(6! = 1×2×3×4×5×6 = 5! × 6\)
- \(7! = 1×2×3×4×5×6×7 = 6! × 7\)
Ceci conduit à une fonction récursive classique
🐍 Script Pythondef factorielle(n):
"Renvoie la factorielle de n positif"
if n == 0:
return 1
else:
return n * factorielle(n - 1)
Cette fonction échoue pour n > 1000 si on ne change pas la profondeur de récursion autorisée. D'autre part, on souhaite stocker les résultats dans un tableau.
Exercice
Coder une fonction factorielle qui prend un entier positif n en paramètre et qui renvoie le nombre factorielle de n après avoir complété, si besoin, la liste des résultats mémorisés factorielle_mem.
- Contraintes
-
- \(0 \leqslant n < 256\)
Fonction récursive interdite
- Modules
math et functools interdits
- Code source limité à 2000 caractères
.128013x/.ùTr;nbOylaeêïu)*dV6ç3Am(Pô+02è-@],59fq78 _o=pcwgvF41`kRIéhtsàSLC[ji:E050u0o0.0n0_0m0/0S0X0m0n0/0/0V010.0_0W010406050/0r0A0A0n0g0l040;0U0m0r1c0U0i0S020n0A0W0h0S0*0o1m0g0P0r0o0/050c1j1l1n1p1h0W04051U1N1X0c1U1h0u0_0!1416181a0-0_0Z0-0m1/0-0.1f050 0j0m0o1*1719011.1:1=1:0.1{1}1_0.0g1V0.0-1 1,010O110o0i1A0o01141s0/0W0n0i1a0G1_2s2u2g212j1}2m0A2o040a0S0C0g0U0W0U0/0_1v1x0}2q0g0g0o0X2S1N2z0i1V0c2e2(2b2d2c1`0u2B1a1=0i2l2P1_1%1)15202=0_2@0i0U2{1_0W2X1V2$2(391i2t1x2}2h320g1m0m1f0S0%2#3d1g3c2A3f213h3j3l0G3o2u3q2$2;013v0n3k040S0y3z2%1h3C3t1a3F3H0S0$3L3B3d3D3R3l0M3V3N3X3P3E0U3i3G3l0w3$3r3e1+3u3+3w3I0Q3:3O3?3Q3^3-3I0R3|3(3~3*3,3S0N443s463Z040%0F4b3=2~473_0%3n1O3p3%4c4k4e0%3y4p3A1Y371N2{2+0u2d2:3)0X332H0|1(1V360o383p3V054I0}4Q4s2h0X0%1f030S0+0i2R0_3G0_0/0n2S0S2U160S1=0/0.1~0}130g0,1j0m0 0.1M4x3M3;3Y1f0O0n2Z3+0_0o0m1}0T2G0A3V0S573)0U1f0V5l5n461e040@4S3}4k0A0_1f4o3b5z2h5v0K3$4r4j2h0)1f0}0O5y454k0Y3l5S4X3u0O595b0.5d5f1}5X5M215v0B5+58040i5:3)5v0s0`4i3D5V3I0S605@460/0u1f01675|3)643l600S0?0U1B0m0H4`0L0S2Q0S0j1L0U306l4?4^4`0S0(5a5c0g5e5g0o5i1G0(6963655 601F0i0!6r1~6z5%6B5)6E5j0@0i0K0S0`4@0n0S6S5(6D4;1~5?553W5Y1a6b6L0S67013$6d5m5G215O040O3+5s6 3Q1f0_755T2h0U5~307a6=3E0j1f0g2u0Z0o624k5.7p3g7j042E7s5-1f5/6:5t4t5#6A6C5h5j7x1a5_0L7g5,775=7N3D5p040E7R3)5B5D7J015_5{6:066}6}7C3g7E0.0T796:6~7b217T5r7=7,3u7.6+7H1G7!5v5x7B763E787W467T0I895A5C4f821f5J7{867T0t8d7-047;397)7*61860i7~6U6D6F5k857@1a7T0d7!8x040n0W0W2l0u8h047A5F8E87725$7:8Q0s6|6d7|1a712X0.0r0g6/397?7h8J6*8z808C8T7h838I1f8.4R865I3:0c4U4P4z960c4C1N0.4E9b2.2)0n1|984C1T4W7O012X0A0T5a0)6E0-0y1f1F1H1J1L6#4S1!3q2{3D0n0u0A1w4*1w0S1c5v1T9H9J9L2S0I1c0.29040{0b0W1=0X4/0_1w1Y3q0r0m3q1=040k1x2@6)100.0S0r1x5%8,6-6o0U0r151~9A6m0_0S0i0,0X1L4.0_2X6l0n1u6g9*9A2G0i0.8H0c9=1h9=0=1~4O5B0o0g9Oa4aC2U0ja4a66m6R9{0S0n0!2Y5m958q0S0V4@2l0B8?7G6W1G8!944J1V9/9;0_7vay1t138N9X0S301%ae0S0U0eaRa)aZ6V8B0@0_8jaSab001L9|2t132l4I2X4;0,2j4)asau059=9N9)0m0X9/1~4Ta 8X7;aS1Nbl9=0^0r4_1G2lbaaE4@000n0^a44`aC2la~4Vb08A6Xb41Nbyata-1h0ca+b#bAa-ax6-8-5eaCa0aF1~aHa51}aK9`2RaNaP0XbR4PaaaV6/bYb)040z302Q6lbQbia2b?aJbubS5$7 a#0A6Yb5a)0Sb9aD0rbM8,131%2s9L9ibkb!1Nb%4B4M1$1(9S9K4)4:0u7maB1f9R3)9IcJ9M0i9W2R9Z0{0O0O0~cvb=3+0u131D0Xb84_0S3j9-9lax13730i2Z9+0i130:cpc!c$cdc)130B9K1%2j9)cL009~1~6v4{bh305e0S0-3+c%6%6)1wc{1w0s0S8N0raPaq0S0p2b1~0/aEa`2Ud8d99/0.4 4;bK2m0m0l0/1~0~2qc}0_0u0,4~9B4I1lbt4_2M0i0Z04ddc:ak0!10dRdu7l1c9A2#2b1wd+0d0S0v6r0Xaa0}0r0b9`0x1wcvbKcM0WbOaW2q0}as1#4L2|46231;1?1^9m3D2D2l2n1f2J0;0X6Bed2K0l2e9,7B4O9m3a4Rby86713t7!5~5m8D8;0X1f0#ci8@7oeS9n5v7%8s7+860/2x04010zb}c:0,9K0q4.2S6{7(8t8v8U715QeP5We!es0A1f0T7:cKf78Q8S908U0j5vdR0m5Rf35^1f5`8#8u8%01ff1ffhfj8`9n8G8}8W2Z8o7^5qfC7K1f84fw3D7Y8gfk5u8i5l8:9n4Z4#6m5%0X0)0n7n6-13d:1}cu5Ke)e~5P0ofvfd7heQ7!0Of504f7bp0mfafN7q7z7!fs04fu8Q7M8k8U8J8 4y91fme%4q8ue}7h71730gfF8V8r3pfR7S7ega2%gq3)0i7u7ld*eZfJfl8R8I7u7wf~5Hg0gI21g2g4gL8F1fasgC4d7.8Zg68/fqg9gm7T7Vg77hfL5Ef:e#gdfogggh9n8=bwg#fEg(9ngN5ff/gb8UfygP8V6S8QfIg,5;go3Agv8a1f8cg`fK8fg+g 8{fPhf5o1f8nhmgU8qg/g:fqg|fi7!h1gT7DfA0.hygRfz8L8N0i8Ph27rh2g?2Z8YhLfmht8$eM7k0~8,gt3Ihvfgg}hE04gSh7gwgVhR5wfzhZfq92e{gZ8ya!g^047`gY8weVeXh`h.0Ba%8s5L3DfT044$0fb9548sfq7120aBhDhqhBbT5*i37!fL4hh.i5gpfq7_h}iv86g*6I4kih18ijgmhO6Ti2hAgJgEh2iBith{0ViyhafqiPifhV8KiF0gikh~g8h_6Vfbiq8f4wiL7y04iuiU8l5qiTguiVhhh{hpi%g)i-iC5N1fiii#iHi)6Di+iO8f3#iQil7ci^gmiWizh0hojij1jffD04i~jkj01f3KjpgQjrjn1f3Ujx018mjA04jdiXf,iZdRj6jDiIcjjai/1afLjwjS7#hSjDixjGhii`i@jzjDfLi.jtfxjmj*8fjV4qigj4i!i$j-5;ingBh+fOiNjWfLjCjW5_iRi_h!iAi|jZj/i 9nj+i}jGj=i?jlj)kehgjB93bYeHcE0!3q1U9@0S0Z1n4=1~4Iaq0g0Db^4=6(7n4_c|a24?0Ae=0Ue@9*1weikv1q301waje:cg4P0O9~5c2rbXa)6ld-dD1tcLah2Y4`kVcGel4ken251@2y8Uet2F2Hexez1d9|0CeDdlh;ks3b7BeLe~8=2M8_j 5Uf2jW0i8=k)5%k+h2f=h20)8J0_1B3+j`kk8;1f9)0X0-j~3A06i7gw6K0JlGlIj270f-g~2%fqlvlo5!hCjQiphN8~8ZgelKf+gi78lVk9i(7Qkch|k8hb8e1fisk51fl+3MhuiY8*hYj#g/j@045fdR8Qm01gm2jKm48-j7l#eYjRll8phZl`jg04hekn7Xkbl~i;khjOl)7(k,4V972(9k1W040?c.9|k/1s1ukM4~br0g2QaP6laehIcMdy0u0H131Jdc1xhH5fb_5ab{1jaCd-bGdZ0S1Jaa6(dX0^c 0,dK143Gbr0m0,0oca6,cq2X6O0U0ln56-0W0r4-eflQ0ok_kt3q990~101204.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)