Recherche dichotomique récursive - Sujet 15 - EP NSI 2025
Énoncé du problème
Exercice 1
EXERCICE 1 (10 points)
Programmer la fonction multiplication qui en paramètres deux nombres entiers relatifs n1 et n2, et qui renvoie le produit de ces deux nombres.
Les seules opérations arithmétiques autorisées sont l’addition et la soustraction.
Exemples :
>>> multiplication(3, 5)
15
>>> multiplication(-4, -8)
32
>>> multiplication(-2, 6)
-12
>>> multiplication(-2, 0)
0
Exercice 2
EXERCICE 2 (10 points)
Soit tab un tableau non vide d’entiers triés dans l’ordre croissant et n un entier.
La fonction chercher ci-dessous doit renvoyer un indice où la valeur n apparaît dans tab si cette valeur y figure et None sinon.
Les paramètres de la fonction sont :
tab, le tableau dans lequel s’effectue la recherche ;x, l’entier à chercher dans le tableau ;i, l’indice de début de la partie du tableau où s’effectue la recherche ;j, l’indice de fin de la partie du tableau où s’effectue la recherche.
L’algorithme demandé est une recherche dichotomique récursive.
Recopier et compléter le code de la fonction chercher suivante :
def chercher(tab, x, i, j):
'''Renvoie l'indice de x dans tab, si x est dans tab,
None sinon.
On suppose que tab est trié dans l'ordre croissant.'''
if i > j:
return None
m = (i + j) // ...
if ... < x:
return chercher(tab, x, ... , ...)
elif tab[m] > x:
return chercher(tab, x, ... , ...)
else:
return ...
Exemples :
>>> chercher([1, 5, 6, 6, 9, 12], 7, 0, 5)
>>> chercher([1, 5, 6, 6, 9, 12], 9, 0, 5)
4
>>> chercher([1, 5, 6, 6, 9, 12], 6, 0, 5)
2
>>> chercher([1], 0, 0, 0)
>>> chercher([1], 1, 0, 0)
0
Les contraintes ci-dessous sont ajoutées par la plateforme et ne font pas partie du sujet.
Exercice 1
Contraintes :
n1etn2sont des entiers relatifs-10^3 <= n1 <= 10^3et-10^3 <= n2 <= 10^3- la fonction renvoie un entier
- seules l’addition et la soustraction sont autorisées comme opérations arithmétiques
Exercice 2
Contraintes :
1 <= len(tab) <= 10^5tabest un tableau non vide d’entiers triés dans l’ordre croissant, doublons possibles-10^9 <= tab[k] <= 10^9et-10^9 <= x <= 10^90 <= i < len(tab)et0 <= j < len(tab); l’appel externe se fait aveci = 0etj = len(tab) - 1- la fonction renvoie
Nonesixne figure pas danstab, sinon un indice où la valeurxfigure - jusqu’à
2*10^4appels successifs sont effectués sur un même tableau : une solution enO(len(tab))par appel dépassera la limite de temps