You are on page 1of 27
610172022 20:44 Les programmes récursifs oho Chapitre 19 Les programmes récursifs Crtains programmes s trouvent dans exarples/recur 19.1 Avec des chaines de caractéres 19.1.1 Une liste de mots (On veut énumérer les éléments d'une liste, Pour cela on éerit le premier élément et on énumére la liste privée de son premier élément. On s'arréte quand la iste est vide On éerit enunere(2) ) return @ 118})5 numer (E311 (2905 , On tape enunere( "Jean", "paul”,"plerre”]) (On obtient, en Eriture Bleue, dans la zone des résultats intermédiares “paul “pierre” 19.1.2 Les mots tant donne un mot de lettres, on veut rie lignes ia premire ligne sera constitute par la premidre lle du mot, Ja deuxieme lige sea constiude par les deux premiéres letes. mie ligne sera constitute pa le mot tout ra nots(n) de fagon recursive. On peu se servir de la fonction si26(a) de xc8e qi renvoie I ress(n,k) do Xeas qui renvoe le mot = privé de sa k-ime Lette (+8. s42e(#)-1). Ontape jombre de lettres du mot, et de la fonction rnier(a)s=6 return suppress(e,size(n)-1); , puis nots (n) TF (Slze(n)e=8) eetuen 6; nots (saufdernier(a)); princ(ays 5 Exercice Comment modifier le programme précédent pour avoir Fant dong mot de lees, on veut rie lignes la premicre igne sera constituse par le mot tout etir, ia euxiéme ligne sere constituce parle mot privé de sa preme lee. demiére ligne sera constitu parla premiere letre du mot Réponse On peu se servi de a fonction ) de Xeas qui renvoie L le mot» privé de sa premidre lettre. notex(a) 3 (6ize(n)=-8) return 6; hitps:lww-fourier.u-grenobler-parisselglaldoctricasrougelcasrouge019.htmil~text=palindrome(s) de facon récursive privée de sa premié... 1/27 se1012029 20:44 Les programmes récursifs prine(ny otex(t2i0(m))s > 19.2. Les palindromes 19.2.1 Les phrases palindromes tant donné une phrase, on veut Serie cette phrase en I’érivant de droite & gauche, On Gere palindrone(s) de fagon récursive 1 faut rajouer la premiére letie de la phrase la fin du palindrome de la phrase privée de sa premiére lettre On tape palindrone(oh): Af (S28) return phy Stesize(ph)-15 return concat(palincrone(‘ai(ph)) phl0])s y faut rajouter la deriére lettre de la phrase devant Ie palindrome de la phrase privée de sa dernire lettre On tape savfcernser(a): return suppress(e,size(n)-1); y palincrone(ph):=( focal $3 SF Gas) return pis roakze(Bh) } (ph s], paindrone(saufdecnier(ph))); 19.2.2 Nombre et valeur palindromique d'un entier Un entier st un palindrome s'il et identique & son palindrome qui est le nombre obtenu en écrivantn de droite & gauche, Par exemple 12321 est un palindrome Pour tout enter, on considers I'algorithme suivant 1 siPentier» est un palindrome on s’aréte, 2. sinon on ajoute a enter son palindrome (’entier Geri a 'envers) el on retourne a tape | Par exemple :687,687+78 14,521444125=9339, (On appelle nombre palindromique dun entiern le rombre Npal(n)d’ tapes nécessare pour obtenir unpalindrome, Par exemple : Npal(12321)=0, Npal(687)=3. (On appelle valeur palindromique d'un enter n la valeur Vpal(n) du palindrome final. Par exemple : Vpal(12321)=12321, Vpal(687)=9339 1. Etant donné un enter, éerire une fonction paling qui renvoie le palindrome de 2. Bra donné un enter», éerie une fonction vnpaliné qui renvo‘e Ia liste constituée den, de sa valeur palindromique et de son nombre \dromique, Attention Lamét du processus est une conjecture. Prévoir un controle stoppant la boucle au dela de p étapes et renvoyant alos la liste Explorer pour p=300 le cas des 100 premiers enters (on nul). (Quels sont les entiers qui n'ont pas obtem de nombre palindrome parm es 1000 premiers entiers ? + a) Soit mle palindrome de n Le lier chit de m est le reste de la division de m par 10. Le 2nd chife de m est le reste de Sevo(n, 10) pat 10 hitps:iwwn fourier. u-grenoblesr-parisselgialdocthicasrougelcasrouge019.htmif~text=palindrome(s) de facon récursive privée de sa prem 207 e1012022 20-44 (On utilise ici la commande tquoren, On tape pauing(n) focal yi mses Tantaue n>=10 faire ‘yresiquoren(n, 18); seancaue; nisternens Petourne ms Ys On tape paling(s9) On obtient 98 On tape poling( 23456789) On obtient 987654222, + 6) On tape vepatina(nsp):=¢ Rocal j,nyn@ aispalind(a)s tantaue nism and j

(On tape : triangien(e, 48,4) 19.3.4 Exercice erie un programme qu rélise le dessin récusf dant ona mis ci-dessous les premitresétapes (profondur0, 1 et 2) On tape trvegut (aa, local. ¢, Lad, 61,€15 Listriangle_equilateral(a,8,¢); Sin90 alors Ba:honothetie(C,- Syas i:anonotherie(ay -2.5,8)3 Chisnonothetie(B,-2.5/C) Liat ertequi(aa,Cya-2)s Uostseriequl(61,Ain-a) CetUersequs(eas@ync2) ue On tape : trteaut(@,1,5) On obtieat hitps:lwwn-fourieru- grenoble fr-parisselgialdocthicasrougelcasrouge019.htmif~text=palindrome(s) de facon récursive privée de sa prem siz 61012022 20:44 Les programmes récursifs On tape : ts On obvient| 0,190.35, 5) 19.3.5 Des triangles équilatéraux emboiés A panir un tingle éguilatal direct ABC on constuites pins .84,C; vriiant Ad =AAB BB y-A3BC cc43ca Inverpréte7 4, comme le baryeentre de Aa et Bb. Monter que le triangle 4,8; C;estéquilatera (n recommence le méme construction & parr de 4 B)Cy be ia procédure eGeursive qui réalse le dessin des m triangles obtenus par celle construction (en out ntl triangles ABC + les autres). hitpsflww-fourerif-grenoble{r-parisselgiacidoctricasrougelessrouge019.htmit~text=palindrome(s) de facon récursive privée de sa prem s027 61012022 20:44 Ona AA;~ASAB-USAA Done 4; est le baryeentre de 4-1 et Bs Done By est le barycentre de B=] et C4 Done C'est le barycentre de C:-1 et 4,4 La rotation r de centre 0, le centre de ABC, et d’angle 2x/3transforme 4 en B, B en C: barycentre de B-I et C4. dire transforme 4 en transforme By en Cy, Done le triangle 4,2 C; estéquiatéral (On tape dans Méditeus de programmes ‘triangles(A,8,n) Toeal LC; ‘arsbarycentre({A,6],[-1,4]) Brsbaryeentre((8,C].[-1,4]) Loststrdangies(A,Byf-1)? ay squlateral(@,8,0)3 puis on compile avec F9 et dans une ligne de commande, on tape ‘riangles(point(@) point(1),5) On abtient hitpsflww-fourierf-qrenoblefr-parisselgiacidoctricasrougelessrouge0'9.himit~text-palindrome(s) de facon récursive privée de sa prem Les programmes récursifs Cen done rtransforme le barycentre de rtransforme le harycentre de B.-1 et C4 en le barycentre de C, m1 et Bs ene Let Adc'est dire wer se1012022 20:44 Les programmes récursifs 19.3.6 Le probléme des 3 insectes ‘Trois insectes parent, des sommets d'un triangle équilatral 4,B,C en direction de son voisin (C regarde B. B regarde C. A regarde C). A chaque étape de leur marche les 3 insectesforment un triangle équilatérl Dessiner les trajectores des 3 insects en résolvant une &) (On peul faite une simulation de la situation en supposaat que chaque insecte ~ regarde son voisin ce qui lui donne sa direction, puis, - avance dans cette direction d'une longueur proprortionnelle au c6vé du triangle, puis, -regarde son voisin ce qui Tui donne sa nouvelle direction ete Faire un programme qui dessne les triangles étapes de cee marche, Refsire le méme exercice en remplayant le triangle équilatéral 4,B.C par un triangle rectangle isoce. Résolution de 3 équations differentielles Les trois insectes ont des trajectoires qui se déduisent Pune de Iautre par une rotation de centre G le centre de gravité du triangle et angle ~2n/3. SizA est Paffixe du point A et 2B celle du point B.., on 8 adel B28 2C=2B-2C ddone 24"+2B"+2€°=0 et done ada2Be2C=este=1+1/2+1N5 23426 tion difféentielle ou un systéme d’équations ifférentilles. hitps:lww-fourieru-grenoblefr-parisselglacldoctricasrougelcasrouge019.htmit~text=palindrome(s) de facon récursive privée de sa promi... 12127 se1012022 20:44 Les programmes récursifs One 2C-2G-exp(-2"Ri3)(c4-26) (€4-2G)2C-2d=(2C“2)-[2A-2G)(eap-2°H13)-Il2A-2G). 200i VIN au lemps 0 on a: 24-0, 2B°1, 2C=1/244 V3 (On tape (on suppose que I'on a coche complexe dans la configuration du CAS) ‘trtangle_equlateral(9,2) 26i=(34759°t(3))/5 Sh: =sinplity(desolve( [d1¢#(2(t) t)-(axp(-244"P1/3)-1)*(2(t)-26), 2@)-8],[2])) s8:sinplity(desolve( [di¢#(2(*) t)>(@xp(-2"4"P1/3)-1)*(2()-26), 2@)-3),[62])) SC: asinplify (desolve([4i#F(2(t)st)-( pC 2(@)=1/24i*s@rt(3)/2], 8,21) On obrient plotparan(SA{0],t-2..4),plotparam(s6[0),* plotparan(sc(@],t+2..4) On obvient p1/3)-1)*€2()-26), a, Résolution d'un systime @’équations différentieles On peut aussi résoudre le syste _ Z=ANZ eau temps 0, Z0)-10,1, 1/2/93 12] avec a>] 0-11 (On tape (on suppose que Complex 2,148], (8), 1], (1,8)-4] Jordana) (On obtient pour P (0a, (-4yrsart(3)-a, (4)"sqre(3)-2), [2.2.2], (2,4) *s9rt)-2, ADs (On obtient pour B [2,28], 8,¢¢2)*sare¢3)-3)/2,0], 8,8, (-1)*s9re(3)-3)/21] On tape voresinplify(inv(P)*[8,1,1/2+4"sqrt(3)/2]) On obvient st coché dans la configuration du CAS } hitpslww-fourerif-qrenobler-parisselgiacidoctricasrougelessrouge0'9.himit~text=palindrome(s) de fagon récursive,privée de sa prem sa se1012022 20:44 Les programmes récursifs [((aptsaet(3)13)/6,((-8) *sart(3)43) 22,2] On tape Vsevarexp(@ On obtient [a/5e((4)*sart(3)43),2/22¢exp( ((1) sqrt ayrt-3°8)/2)*((-4)5ar%(3)*9), 2] On tape zas=sinpl1ty(2[0]);28:=sinplify(22]) 20! =sinplfy(2I2])5 plotparan(zA,t-8. 4) plotparan(z3,t=8..#),plotparan(ZC,t-8..4), triangle equilatersl(9,1) On obtieat la figure préeédente ) Dans le eas du triangle ABC avee : npoirt(1*10), le systéme d resouulre est le méme e"est juste la condition initale qui change (vo:=inv(?)*[0,2,1]) et les 3 (On tape (on suppose que conptexe est coche Ace (-1,1,0], 0,-1.2], (2,8,-11] PyBinjondan(h) vos =sinplify(Snv()*T0,1,4) On obvient [easid/3, (sort(3)42-8)/22, (-sart(3)e2-4)/22] Visverexp(3*t) On obvient [(a4i9/3,4/22% expC (Cid*sqrt(3)*t-380)/2)*Csqrt2)e2-I), 4/2M exp (CID sart(3)*E- 3 /2)*C-s@rt3)e2-1) On tape 2As=sinplify(2(0]);28:-sinplify(22]):2C:=sinelfy(2L2))5 plotparan(ZA,t=8..4),plotparan(73,t=0.-8),plotparan(ZC,&=0..8), tesangie(@,1,) On obtient le figure Le dessin des triangles On dessine le triangle Gquilatéral ABC puis le twiangle ALBICI avec hitps:haw- fourier. u-grenoblefr-parisselglacldoctricasrougelcasrouge019.htmit~text=palindrome(s) de facon récursive privée de sa promi... 14/27 e1012022 20:44 Les programmes récursis Al=A+evalf((B-A)/10), Bi=Bsevalf(C-B)10) ct CinC-evalfA-CV10 prison recammmence le ate proceanus avec A1B1CI...Ontupe trtop0(a,0) Jocal Le,e) triangle. equilateral (point(a),point(6),): cevalt(afFixe(@));, SH evale(a0s(bra)} y ta fonction groupesyn qu utilise la fonction rbeusive groves s Ifucitise groupe_s ‘Viaroupesyn(1) renvole toutes Les permutations de 2 groupesya(l):-return(groupe.s({ 1.1995 2/ Bn faisant 2 appels récursifs. Cet algorithme est surtout fait pour des langages qui n'ont pas de boucle For, Les fonctions vont ufliser la fonction circulaire (pour plus de claret), puis on remplacera eieculaire(1) par concat(taii(1),1[0]) Utss(42,3)3 edneutaire(l) Urenvole'I2 Liste 1 ou 12 tete est aise 2 1a fin. eireulaire(l):=( return coneat(tai1(1), 118) % (On peut décrire Parbre des permutations de la iste 1 partir dela racine on a x-size(1) branches. Chaque branche commence par chacun des On va parcourir cet arbre, en parcourant la premiére branche, puis en considérant qu'il reste parcourir un arbre de n-1 branches. On aura done 2 appels curs Pout le parcours de la premigre branche, il faut connaite Ia liste des éléments gui nous a permis darriver dun meud donné, cet cette liste que 'on met dans 1, 1 contenant les éléments qu'il faut encore permuter. On s’aréte quand Lf] et erésultat est [24 Pout le parcours des n~! branches restantes, on change pour chaque branche la listed permuter en circulatre(1). 1 faut un test d’arét pour ce parcours, pour cela on a besoin d'un paramétre supplementaire qui sera 1 (liste de référence éyale 82 au départ) dans pernss ou gi sean ongue de au dépar) dans prs. hitps:hww- fourier u-grenobler-parisselglacldoctricasrougelcasrouge019.htmil~text=palindrome(s) de facon récursive, privée de sa promi... 26/27 610172022 20:44 1) weilise cireuiai 2, Ue, 2] perass(CJ.1005 [Pstodebut ce 1, Totiste » perwoters UPisetiste de reference (el ou debut) ppermes(id1, 1,20) :-f return [op(pernss(concat 161,1{@}),tai1(1),tail(1)))» ‘optperass(Iah,cireulaie(l),tail(2a)))]5 y On Jfucttise circulaire, 1:=[2,2,3,4];peressi([] ,si22(1)); [Plaledebut Ge 1, Inliste =’ perwuter, nesize(l)’ au abut permssi(241,4n)!={ ) return [140] ‘peturn [)s return [op(perass1(concat(1é,[e]) tatl(2),size(tail(l)))), op(pernssi (lel, eirculaire(3),1 a) % (On a aussi écrit la fonction pernss2 contenant une variable locale 1 gui es a liste & renvoyer et qui donne un algorithme pls lisible 1 Ls=(2,2};permss2((. 1,105 {pdiadebat' Ge 1, L=liste a pernuter, {/ldeliste de reference (+1 su debut) U1 Ar liste 8 renvoyer en variable locale pernss2(idl, 1,24) ={ {local Ins 1) return Arseperass2(coneat (Iai 1[@]) .t9i1(2),t241(2)); arssappend(dr,op(pernss2 (Lat concat (tail (2) 3(e})tail(e))))5 sen a puis la fonction pereute qui utilise permss2 {fucttise perass2, Viparaute(l) renvoie toutes Les pernutations de 1 permate(d) = Peturn permas2({],1,205, * On tape permave((1,2,3]) On obtient (03,237, 02,3,21,(2,3,31,12,2,31,(3,2.2),03.2,27) Les programmes récursis iC perneei qui ulilse comme paramétren qui représente la longueur de la liste qui reste & permuter (n-size(2) au départ) oho hitps:law- fourier u-grenobler-parisselglacldoctricasrougelcasrouge019.htrif~text=palindrome(s) de facon récursive,privée de sa prem amet

You might also like