• Aucun résultat trouvé

2Exercice2:Deslistesrusses...auxlistessyldaves 1Exercice1:factorielleenrécursif recursivite_extrait_pour_pdf

N/A
N/A
Protected

Academic year: 2022

Partager "2Exercice2:Deslistesrusses...auxlistessyldaves 1Exercice1:factorielleenrécursif recursivite_extrait_pour_pdf"

Copied!
3
0
0

Texte intégral

(1)

recursivite_extrait_pour_pdf

September 21, 2019

1 Exercice 1 : factorielle en récursif

On souhaite programmer une fonction factorielle(n) qui retourne la factorielle de l’entier n passé en paramètre.

Par exemple on a factorielle(7)=7*6*5*4*3*2*1 autrement dit factorielle(7) = 7 * factorielle(6).

Ce qui conduit aisément à la relation suivante :

factorielle(n) = n * factorielle(n-1) pour un entier n>=1et par convention factorielle(0)=1.

La programmer en récursif : In [0]: def factorielle(n):

pass

2 Exercice 2 : Des listes russes . . . aux listes syldaves

2.1 Listes russes

Par analogie avec une poupée russe, on considère dans cet exercice une ´n liste russe ˙z. Sans chercher à formaliser ce concept, on se donne une liste de départ qui peut :

• soit être vide

• soit contenir une autre liste qui elle-même peut : soit être vide

soit contenir une autre liste qui elle-même peut :

* soit être vide

* soit contenir une autre liste qui elle-même peut :

· etc. . .

Bien entendu on suppose que ce processus s’arrête à un moment donné. Autrement dit on suppose que la liste de départ (lamatriona) a un nombre fini de descendantes (lesmatriochkas).

1

(2)

2.1.1 Question 1

La fonction engendrer_liste_russe fournie ci-dessous renvoie une liste russe qui contient un nombre aléatoire de listes emboîtées les unes dans les autres.

Écrire une fonction compter_liste_russe programmée en récursif qui, en prenant en argu- ment une liste russe, permet de déterminer combien de listes sont emboîtées les unes dans les autres (dans la liste russe passée en argument).

2.1.2 Question 2

Pouvait-on, ou pas, la programmer raisonnablement en itératif ? In [6]: import random

def engendrer_liste_russe():

nb = random.randint(9, 98) L = []

for i in range(nb):

L = [L]

return L

ma_liste_russe = engendrer_liste_russe() def compter_liste_russe(L):

pass

2.2 Listes syldaves

On s’intéresse maintenant aux listes syldaves dont le concept est très proche des listes russes. Sans chercher à formaliser ce concept, on se donne une liste de départ qui peut :

• soit être vide

• soit contenirdeuxautres listes dont chacune peut, indépendamment de l’autre : soit être vide

soit contenirdeuxautres listes dont chacune peut, indépendamment de l’autre :

* soit être vide

* soit contenirdeuxautres listes dont chacune peut, indépendamment de l’autre :

· etc. . .

Bien entendu on suppose que ce processus s’arrête à un moment donné.

Autrement dit chaque poupée syldave peut désormais contenir 0 ou 2 enfants . . .

Autrement dit on modélise ici unarbregénéalogique (descendance d’un ancêtre) simplifié où les unions (mariages etc.) ne sont pas représentées et où chaque individu ne peut avoir que 0 ou 2 descendants . . .

2

(3)

2.2.1 Question 3

La fonctionengendrer_liste_syldavefournie ci-dessous permet de retourner une liste syldave obtenue aléatoirement.

Écrire une fonction compter_listes_syldaves programmée en récursif qui, en prenant en argument une liste syldave, permet de déterminer combien de listes sont,in fine, contenues dans la liste syldave.

2.2.2 Question 4

Pouvait-on, ou pas, la programmer raisonnablement en itératif ? In [3]: import random

def engendrer_liste_syldave(*ottokar):

if len(ottokar)== 2 : n = ottokar[0]

if n == 0 and ottokar[1]==0:

return []

else:

sceptre1, sceptre2 = min(random.randint(0,3), 1), min(random.randint(0,3), 1)

return [engendrer_liste_syldave(max(sceptre1*(n-1),0), max(ottokar[1]-1, 0)), engendrer_liste_syldave(max(sceptre2*(n-1), 0), max(ottokar[1]-1, 0))]

else :

return engendrer_liste_syldave(random.randint(8, 10), 2) ma_liste_syldave = engendrer_liste_syldave()

def compter_liste_syldave(L):

pass

3

Références

Documents relatifs

Dans le monde de la vie cela se traduit pour le patient et les équipes (i.e. les usagers du système de santé ? Ce que nous sommes tous en tant que citoyens), par des temps

En tant que sociologue non spécialisé dans les objets sportifs mais ayant mené des interrogations sur certaines problématiques associées, quels regards portez-vous

d'hydroxyde de sodium de concentration molaire volumique C B = 10 -1 mol.L -1. A chaque volume d'hydroxyde de sodium versé, on mesure le pH du mélange. On obtient alors le tableau

Lors de la crise Crétacé/Tertiaire, il y a 65 Millions d’années (limite entre l’ère Mésozoïque et l’ère Cénozoïque), les dinosaures disparaissent de la surface de la

 Les jeux que mon parrain m'a offerts sont encore dans leur emballage d'origine.  Tu devrais déballer toutes les affaires pour

5.07 Des frais de 90 $ (plus taxes) sont ajoutés à la facture pour tout paiement de la cotisation à la suite de l’annulation de l’inscription initiale au tableau. RÉINSCRIPTION

Q₃ - Pour les plus courageux : décrire une méthode permettant de trouver le plus petit entier k tel qu’il existe au moins 2021 entiers consécutifs strictement positifs dont la

Soit O le centre de ce cercle.Un deuxième cercle de même centre O coupe les trois côtés du triangle ABC en six points distincts qui délimitent un deuxième hexagone.. Démontrer