Aller au contenu

Devoir sur la récursivité

Durée : 55 min

Exercice 1

Représenter ce qui s’affiche sur la fenêtre graphique à l’exécution du code suivant :

from turtle import *
def dessine(n):
    if n>0:
        forward(n)
        right(90)
        dessine(n-5)
dessine(100)

Exercice 2

Soit la fonction suivante :

def pair(n) :
    while n>0 :
        n=n-2
    return n==0

Écrire une version récursive de cette fonction

Exercice 3

Écrire une fonction récursive inverse qui prend en paramètre une chaîne de caractères ch et renvoie la chaîne obtenue en inversant l’ordre des caractères. Par exemple, inverse('azerty') a pour valeur la chaîne 'ytreza'

Exercice 4

On dispose d’une fonction nettoie qui prend en paramètre une liste triée et élimine les éléments identiques. Par exemple si la liste est liste=[1,1,2,6,6,6,8,8,9,10], après l’instruction nettoie(liste), cette liste a pour valeur [1,2,6,8,9,10].

def nettoie(L) :
    n=len(L)
    k=0
    while k<n-1 :
        if L[k]!=L[k+1] :
            k=k+1
        else :
            del L[k]
            n=len(L)

Écrire une fonction récursive de la fonction nettoie.

Exercice 5

En géométrie euclidienne, un polygone régulier (convexe) est un polygone à la fois équilatéral (tous ses côtés ont la même longueur) et équiangle (tous ses angles ont la même mesure). Ci-dessous un polygone régulier à 9 côtés.

La somme des angles d’un polygone régulier à \(n\) côtés est \((n-2)\times 180\). Dans un carré cela fait \(360\) ... et pour notre polygone à \(9\) côtés cela fait \(7\times 180\).

La mesure de l’un des angles ( ils sont tous égaux) est donné par la formule : \(\dfrac{(n-2)\times 180}{n}\).

On obtient \(90\) pour un carré et \(140\) pour notre polygone à \(9\) cotés.

Réaliser une fonction récursive, qui prend en paramètres le nombre de côtés(\(n\)), la longueur d’un côté et l’angle de rotation et qui affiche un polygone régulier à \(n\) côtés avec le module turtle.

Exercice 2

Version récursive :

def pair(n):
    if n<=1:
        return n==0
    else:
        return pair(n-2)

Exercice 3

def inverse(ch):
    if len(ch)==1:
        return ch
    else:
        return ch[-1]+inverse(ch[:-1])

Autre version, un peu plus rapide:

def inverse(ch):
    if len(ch)<=1:
        return ch
else:
    return ch[-1]+inverse(ch[1:-1])+ch[0]

Exercice 4

def nettoie(L):
    if len(L)==1:
        return L
    else:
        if L[0]==L[1]:
            return nettoie(L[1:])
        else:
            return [L[0]]+nettoie(L[1:])

Exercice 5

def pol(n,L):
    angle=180-((n-2)*180/n)
    poly(n,L,angle)

def poly(n,L,angle):
    if n==1:
        forward(L)
    else:
        forward(L)
        left(angle)
        poly(n-1,L,angle)