Aller au contenu

É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 Python
def 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
###(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 : /
.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.