Formation I.S.N.

Minimum d'une liste

Exercice : minimum d'une liste

Écrire une fonction python récursive :

Paramètre d'entrée Une liste de nombres.
Valeur renvoyée La valeur de l'élément minimum de la liste.
  • Définition récursive
  • un premier code
  • avec accumulateur
  • Cas de base : lorsque la liste ne contient qu'un seul élément, le minimum est la valeur de cet élément.
  • Dans les autres cas : le minimum des éléments de L = [a0 , a1 , a2 , ..., an] est la plus petite valeur entre le minimum des éléments de la liste L'= [a0 , a1 , a2 , ..., an-1] et la valeur de l'élément an.

Une solution Python :


def minimum(a,b) :
	""" retourne le plus petit des nombres a et b."""
	if a < b : return a
	else : return b
	 
	

def minimumListe(L) :
    """ L : liste non vide.
    Retourne un des éléments de plus petite valeur de la liste."""
    if len(L) == 1 : return L[0]
    else : return minimum(L[0], minimumListe(L[1:]))

print(minimumListe([2,8,-2,45,74,0]))

On peut également décider de définir le cas de base sur une liste vide :


def minimum(a,b) :
	""" retourne le plus petit des nombres a et b."""
	if a < b : return a
	else : return b



def minimumListe(L) :
    """ L : liste non vide.
    Retourne un des éléments de plus petite valeur de la liste."""
    if L == [] : return float('inf')
    else : return minimum(L[0], minimumListe(L[1:]))

print(minimumListe([2,8,-2,-7,45,74,0]))

ou encore :


def minimum(a,b) :
	""" retourne le plus petit des nombres a et b."""
	if a < b : return a
	else : return b


def minimumListe(L) :
	""" L : liste non vide.
	Retourne un des éléments de plus petite valeur de la liste."""
	if L == [] : return float('inf')
	*tete, queue = L
	return minimum(queue, minimumListe(tete))



print(minimumListe([2,8,-2,-7,45,74,0]))

Une solution Python avec accumulateur :


def minimumListe(L) :
	""" L : liste non vide.
	Retourne un des éléments de plus petite valeur de la liste."""
	def miniL(i, m) :
		if i == len(L) : return m
		else : 
			m = m if m < L[i] else L[i]
			return miniL(i+1 , m )
	return miniL(0,L[0])

print(minimumListe([2,8,-2,45,74,0]))

Compléments Python

Avec Python, on ne déterminera pas le minimum d'une liste avec de telles fonctions récursives. Nous indiquons ci-dessous deux codes qui pourraient être utilisés.

p = min( [5,7,3,4]  ) 
print(p)
from functools import reduce
 
p = reduce( lambda x, y: x if x < y else y , [5,7,3,4]   ) 
print(p)