• Aucun résultat trouvé

2 Ecriture en base 2

N/A
N/A
Protected

Academic year: 2022

Partager "2 Ecriture en base 2"

Copied!
4
0
0

Texte intégral

(1)

Récursivité

1 Factorielle

Un programme non récursif ? Un programme récursif ? Le principe :

Pour calculer 20!, vous demandez à un assistant de calculer19!, et vous multipliez par 20; l'assistant, lui...

Question

Que se passe-t-il sin <0 ? Démonstration

Comment démontrer que le programme récursif fournit la bonne réponse ? Par récurrence sur n.

2 Ecriture en base 2

Ecrire une fonction qui prend en entrée un entier natureln et calcule une chaîne de caractères qui représentenen base 2.

def baseDeux(n):

if n > 1:

return baseDeux(n // 2) + str(n % 2) else:

return str(n)

3 La suite de Fibonacci

Dénition

F0= 0, F1= 1, et

∀n≥0, Fn+2=Fn+1+Fn

Ecrire 3 fonctions Python qui calculentFn : - Une fonction récursive.

- Une fonction non récursive ecace.

- Une fonction récursive ecace.

Remarque

Avec la première, problèmes à partir den=30 à 35... Donc à proscrire absolument.

Encore mieux

SoitM =

0 1

1 1

. On vérie facilement que pour tout entier natureln: Fn+1

Fn+2

=M.

Fn

Fn+1

Mn =

Fn−1 Fn

Fn Fn+1

Ensuite ?

4 Exponentiation rapide

1

(2)

def factorielle(n):

aux = 1

for k in range(2, n + 1):

aux *= k return aux def facto_rec(n):

if n == 0:

return(1)

return n*facto_rec(n-1)

def fib_rec(n):

if n <= 1:

return n else:

return fib_rec(n-1) + fib_rec(n-2) def fibonacci(n):

if n <= 1:

return n a, b = 0, 1

for k in range(2, n+1):

a, b = b, a + b return b

def fib_rec_efficace(a, b, n):

if n == 0:

return a if n == 1:

return b

return fib_rec_efficace(b, a+b, n-1) def fib_rec_efficace_bis(n):

if n == 0:

return 0 if n == 1:

return 0, 1

u, v = fib_rec_efficace_bis(n - 1) return v, u + v

1

(3)

def expo_rapide_recursif(a,n):

if n == 1:

return a if n%2 == 0:

return expo_rapide_recursif(a**2, n//2) else:

return a*expo_rapide_recursif(a**2, n//2)

def expo_rapide(a,n):

resultat = 1 while n > 0:

if n % 2 == 1:

resultat *= a n = n//2

a = a**2 return resultat

# Invariant de boucle :

# resultat*a**n est constant

1

(4)

5 Un programme inutile

Expliquez ce que fait ce programme.

from random import randint def essai(n):

loc = randint(1,100)

print('n : ', n, ', loc : ', loc) if n > 1:

essai(n-1) essai(n-2)

print('n : ', n, ', loc : ', loc) Les variables globales

Extrait du programme ociel :

On décourage l'utilisation des variables globales autant que possible.

from random import randint def essai(n):

global a

a = randint(1,100)

print('n : ', n, ', a : ', a) if n > 1:

essai(n-1) essai(n-2)

print('n : ', n, ', a : ', a)

4

Références

Documents relatifs

[r]

[r]

Voici un algorithme qui calcule la

La troncature à l’unité d’un nombre (encore appelée partie entière) est le nombre entier obtenu en supprimant tous les chiffres après la virgule.. Par convention, on dit que

Comme il est nécessaire de dire les noms des nombres pour communiquer à l’oral, cela doit être travaillé dès le début de la séquence. On travaille cette tâche dans les deux

Comme il est nécessaire de dire les noms des nombres pour communiquer à l’oral, cela doit être travaillé dès le début de la séquence. On travaille cette tâche dans les deux

Point Méthode : Pour comparer deux nombres en écriture fractionnaire, on les met sous le même dénominateur : le plus petit est celui qui a le plus petit numérateur. Exemple : On

Point Méthode : Pour comparer deux nombres en écriture fractionnaire, on les met sous le même dénominateur : le plus petit est celui qui a le plus petit numérateur. Exemple : On