• Aucun résultat trouvé

Récursion et programmation fonctionnelle INFO1 - Semaine 36 Guillaume CONNAN

N/A
N/A
Protected

Academic year: 2022

Partager "Récursion et programmation fonctionnelle INFO1 - Semaine 36 Guillaume CONNAN"

Copied!
37
0
0

Texte intégral

(1)

Récursion et programmation fonctionnelle

INFO1 - Semaine 36

Guillaume CONNAN

IUT de Nantes - Dpt d'informatique

Dernière mise à jour : 2 septembre 2012

(IUT de Nantes - Dpt d'informatique ) 1 / 26

(2)

1 Un petit jeu pour commencer 2 Fonction

Souvenirs du lycée

Langage des expressions 3 Récursion

Récursion, récurrence, induction Induction mathématique

(IUT de Nantes - Dpt d'informatique ) 2 / 26

(3)

Sommaire

1 Un petit jeu pour commencer 2 Fonction

Souvenirs du lycée

Langage des expressions 3 Récursion

Récursion, récurrence, induction Induction mathématique

(IUT de Nantes - Dpt d'informatique ) 3 / 26

(4)

arrivee);

print newline();;

mouvement élémentaire

let rec hanoi a b c= function

| 0−> () (* 0 d i s q u e : on ne f a i t r i e n *)

| n−> hanoi a c b (n-1); (* n1 d i s q u e s s o n t d é p l a c é s de a v e r s b *)

mvt a c; (* on d é p l a c e l e d i s q u e r e s t a n t en a v e r s c *) hanoi b a c (n-1) (* n1 d i s q u e s s o n t d é p l a c é s de b

v e r s c *);;

résolution récursive du problème des tours de Hanoï

(IUT de Nantes - Dpt d'informatique ) 4 / 26

(5)

let mvt depart arrivee=

print string

("Déplace un disque de la tige "^depart^" vers la tige "^

arrivee);

print newline();;

mouvement élémentaire

let rec hanoi a b c= function

| 0−> () (* 0 d i s q u e : on ne f a i t r i e n *)

| n−> hanoi a c b (n-1); (* n1 d i s q u e s s o n t d é p l a c é s de a v e r s b *)

mvt a c; (* on d é p l a c e l e d i s q u e r e s t a n t en a v e r s c *) hanoi b a c (n-1) (* n1 d i s q u e s s o n t d é p l a c é s de b

v e r s c *);;

résolution récursive du problème des tours de Hanoï

(IUT de Nantes - Dpt d'informatique ) 4 / 26

(6)

# hanoi "A" "B" "C" 3;;

Déplace un disque de la tige A vers la tige C Déplace un disque de la tige A vers la tige B Déplace un disque de la tige C vers la tige B Déplace un disque de la tige A vers la tige C Déplace un disque de la tige B vers la tige A Déplace un disque de la tige B vers la tige C Déplace un disque de la tige A vers la tige C - : unit = ()

(IUT de Nantes - Dpt d'informatique ) 5 / 26

(7)

# hanoi "A" "B" "C" 4;;

Déplace un disque de la tige A vers la tige B Déplace un disque de la tige A vers la tige C Déplace un disque de la tige B vers la tige C Déplace un disque de la tige A vers la tige B Déplace un disque de la tige C vers la tige A Déplace un disque de la tige C vers la tige B Déplace un disque de la tige A vers la tige B Déplace un disque de la tige A vers la tige C Déplace un disque de la tige B vers la tige C Déplace un disque de la tige B vers la tige A Déplace un disque de la tige C vers la tige A Déplace un disque de la tige B vers la tige C Déplace un disque de la tige A vers la tige B Déplace un disque de la tige A vers la tige C Déplace un disque de la tige B vers la tige C - : unit = ()

(IUT de Nantes - Dpt d'informatique ) 6 / 26

(8)

1 Un petit jeu pour commencer 2 Fonction

Souvenirs du lycée

Langage des expressions 3 Récursion

Récursion, récurrence, induction Induction mathématique

(IUT de Nantes - Dpt d'informatique ) 7 / 26

(9)

Sommaire

1 Un petit jeu pour commencer 2 Fonction

Souvenirs du lycée

Langage des expressions 3 Récursion

Récursion, récurrence, induction Induction mathématique

(IUT de Nantes - Dpt d'informatique ) 8 / 26

(10)

Soit f la fonction qui à un entier k associe l'entier naturel k2. Calculer f (2) et f (2−3) .

(IUT de Nantes - Dpt d'informatique ) 9 / 26

(11)

function F (X: in INTEGER) return INTEGER is begin

return X*X;

end F;

let f = fun x−> x*x ;;

(IUT de Nantes - Dpt d'informatique ) 10 / 26

(12)

function F (X: in INTEGER) return INTEGER is begin

return X*X;

end F;

let f = fun x−> x*x ;;

(IUT de Nantes - Dpt d'informatique ) 10 / 26

(13)

puissance(x,n)=x×x× · · · ×x

| {z }

n fois

(IUT de Nantes - Dpt d'informatique ) 11 / 26

(14)

puissance=[f| ∀x (xRf (x,0)=1)∧ ∀xn ((x,n)R×Nf (x,n+1)=x×f (x,n))]

(IUT de Nantes - Dpt d'informatique ) 12 / 26

(15)

Sommaire

1 Un petit jeu pour commencer 2 Fonction

Souvenirs du lycée

Langage des expressions 3 Récursion

Récursion, récurrence, induction Induction mathématique

(IUT de Nantes - Dpt d'informatique ) 13 / 26

(16)

2*(3+4) a*(b+c)

(IUT de Nantes - Dpt d'informatique ) 14 / 26

(17)

2*(3+4) a*(b+c)

(IUT de Nantes - Dpt d'informatique ) 14 / 26

(18)

# let g = fun x−> x *. x;;

val g : float−> float = <fun>

# f(3);;

- : int = 9

# f(1.2);;

Characters 1-6:

f(1.2);;

^^^^^

Error: This expression has type float but an expression was expected of type int

(IUT de Nantes - Dpt d'informatique ) 15 / 26

(19)

let f = fun k−> k*k;;

val f : int−> int = <fun>

# let g = fun x−> x *. x;;

val g : float−> float = <fun>

# f(3);;

- : int = 9

# f(1.2);;

Characters 1-6:

f(1.2);;

^^^^^

Error: This expression has type float but an expression was expected of type int

(IUT de Nantes - Dpt d'informatique ) 15 / 26

(20)

# let g = fun x−> x *. x;;

val g : float−> float = <fun>

# f(3);;

- : int = 9

# f(1.2);;

Characters 1-6:

f(1.2);;

^^^^^

Error: This expression has type float but an expression was expected of type int

(IUT de Nantes - Dpt d'informatique ) 15 / 26

(21)

let f = fun k−> k*k;;

val f : int−> int = <fun>

# let g = fun x−> x *. x;;

val g : float−> float = <fun>

# f(3);;

- : int = 9

# f(1.2);;

Characters 1-6:

f(1.2);;

^^^^^

Error: This expression has type float but an expression was expected of type int

(IUT de Nantes - Dpt d'informatique ) 15 / 26

(22)

# let g = fun x−> x *. x;;

val g : float−> float = <fun>

# f(3);;

- : int = 9

# f(1.2);;

Characters 1-6:

f(1.2);;

^^^^^

Error: This expression has type float but an expression was expected of type int

(IUT de Nantes - Dpt d'informatique ) 15 / 26

(23)

# let h = fun a b−> f (b-a);;

val h : int−> int−> int = <fun>

# h 7 3;;

- : int = 16

Comment a été calculé h 7 3 ?

(IUT de Nantes - Dpt d'informatique ) 16 / 26

(24)

# let h = fun a b−> f (b-a);;

val h : int−> int−> int = <fun>

# h 7 3;;

- : int = 16

Comment a été calculé h 7 3 ?

(IUT de Nantes - Dpt d'informatique ) 16 / 26

(25)

let hh a b = let ff k =

fun k−> k*k

in

ff (b-a);;

(IUT de Nantes - Dpt d'informatique ) 17 / 26

(26)

1 Un petit jeu pour commencer 2 Fonction

Souvenirs du lycée

Langage des expressions 3 Récursion

Récursion, récurrence, induction Induction mathématique

(IUT de Nantes - Dpt d'informatique ) 18 / 26

(27)

Sommaire

1 Un petit jeu pour commencer 2 Fonction

Souvenirs du lycée

Langage des expressions 3 Récursion

Récursion, récurrence, induction Induction mathématique

(IUT de Nantes - Dpt d'informatique ) 19 / 26

(28)

induction

induction mathématique (raisonnement par récurrence) fonction récursive, type récursif

(IUT de Nantes - Dpt d'informatique ) 20 / 26

(29)

induction

induction mathématique (raisonnement par récurrence) fonction récursive, type récursif

(IUT de Nantes - Dpt d'informatique ) 20 / 26

(30)

induction

induction mathématique (raisonnement par récurrence) fonction récursive, type récursif

(IUT de Nantes - Dpt d'informatique ) 20 / 26

(31)

Sommaire

1 Un petit jeu pour commencer 2 Fonction

Souvenirs du lycée

Langage des expressions 3 Récursion

Récursion, récurrence, induction Induction mathématique

(IUT de Nantes - Dpt d'informatique ) 21 / 26

(32)

1 2 3 4

1 2 3 4 5

(IUT de Nantes - Dpt d'informatique ) 22 / 26

(33)

n!=1×2×3× · · · ×(n−1)×n

fac(n): si n=1 alors 1 sinon n*(fac (n-1))

(IUT de Nantes - Dpt d'informatique ) 23 / 26

(34)

n!=1×2×3× · · · ×(n−1)×n

fac(n): si n=1 alors 1 sinon n*(fac (n-1))

(IUT de Nantes - Dpt d'informatique ) 23 / 26

(35)

Exercice 1

Pour la factorielle, on prouve par récurrence quefac(n) calcule bien n! et que le nombre d'appels de la fonctionfacengendrés par le calcul defac(n) est égal à n−1 : faites-le !

(IUT de Nantes - Dpt d'informatique ) 24 / 26

(36)

fac(n): si n=1 alors 1 sinon (fac (n+1))/(n+1)

(IUT de Nantes - Dpt d'informatique ) 25 / 26

(37)

let rec fac = function

|1−> 1

|n−> n*fac(n-1);;

let rec fac n =

if n = 1 then 1 else n*fac(n-1);;

let rec fac n = match n with

|1−> 1

|_−> n*fac (n-1);;

let fac n =

let rec temp = function

|1,acc−> acc

|n,acc−> temp(n-1 , n*acc)

in

temp(n,1);;

(IUT de Nantes - Dpt d'informatique ) 26 / 26

Références

Documents relatifs

Josette reçoit donc la boîte fermée : elle utilise sa clé, qu’elle seule possède, pour ouvrir la boîte et se pâmer devant vos élans épistolaires.. (IUT de Nantes -

3 Si, de plus , les pivots apparaissent en ordre croissant par numéro de ligne et numéro de colonne, on dit que M est `-réduite échelonnée (en abrégé lré ou LRé).. (IUT de Nantes

This treatment of nan ensures that compare defines a total ordering relation. (IUT de Nantes - Dpt d’informatique ) 11

Ils le font soit automatiquement, soit si la fonction utilise une récursion terminale, c’est-à-dire si l’appel récursif à la fonction n’est pas enrobé dans une autre fonction.

Automates à états finis avec sortie Automates à pile..

Ce qui va nous intéresser informatiquement, c'est une fonction qui crée une partition d'un ensemble selon une propriété, par exemple pour regrouper les entiers pairs parmi les

Langage reconnaissable Langage reconnu Automates équivalents Automates standards Automates émondés.. Théorème

Vous disposez de deux interrupteurs commandant une même ampoule : comment modéliser le système de va-et-vient. (IUT de Nantes - Dpt d'informatique ) 33