Easier to read with cream paper, a tint, more contrast or larger text? Choose your colours and text, once, for every page.

Aperçu

Ne pas refaire le même calcul

Voici la première page de la leçon. Lis-la et essaie les activités. La suite est dans le cours complet.

40 minutes

Le carnet de calculs

Un ami te demande combien font 7 fois 8. Tu calcules : 56. Dix minutes plus tard, il te le redemande. Tu ne refais pas le calcul. Tu le sais déjà.

Un programme ne fait pas toujours ça. Parfois il refait le même calcul des milliers de fois, et devient très lent.

La solution : écrire les réponses dans un carnet, et regarder le carnet avant de calculer.

Mots-clés

MotCe que ça veut direExemple
Suite de FibonacciUne suite de nombres : chaque nombre est la somme des deux précédents. On commence par 0 et 1.0, 1, 1, 2, 3, 5, 8
Sous-problèmeUn petit calcul dont on a besoin pour faire le grand.fib(3) pour calculer fib(4)
MémoireUn dictionnaire où l'on range les réponses déjà calculées. La clé est le n, la valeur est la réponse.{3: 2, 4: 3}
MémoïsationRanger chaque réponse dans la mémoire, et la relire au lieu de la recalculer.if n in memoire
Tableau de résultatsUne liste qu'on remplit des petits calculs vers le grand, sans récursivité.[0, 1, 1, 2, 3]
AppelChaque fois qu'on utilise une fonction.fib(4) est un appel

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

À toi : la suite de Fibonacci

À toi de jouer

À toi : la suite de Fibonacci

3 questions
Essayez : vos réponses sont notées ici puis oubliées. Connectez-vous si vous voulez conserver votre score et reprendre là où vous en étiez.Se connecter pour conserver mon score

Tes réponses sont corrigées ici et ne sont pas conservées. Un compte garde tes résultats.

La suite avec une fonction récursive

fib(0) vaut 0 et fib(1) vaut 1. Pour tout autre n, fib(n) est fib(n - 1) plus fib(n - 2).

C'est facile à écrire avec une fonction qui s'appelle elle-même. Mais regarde combien d'appels elle fait.

À toi : compter les appels

Code: python
appels = 0


def fib(n):
    global appels
    appels = appels + 1
    if n < 2:
        return n
    return fib(n - 1) + fib(n - 2)


for n in [5, 10, 20]:
    appels = 0
    resultat = fib(n)
    print("fib(", n, ") =", resultat, "avec", appels, "appels")

# Essaie n = 25. Combien d'appels ? Et n = 30 : attends-tu longtemps ?

À toi : lire le dessin

À toi de jouer

À toi : lire le dessin

4 questions
Essayez : vos réponses sont notées ici puis oubliées. Connectez-vous si vous voulez conserver votre score et reprendre là où vous en étiez.Se connecter pour conserver mon score

Tes réponses sont corrigées ici et ne sont pas conservées. Un compte garde tes résultats.

La leçon continue

14 parties de plus de cette leçon se trouvent dans le cours complet, avec les exercices et la vérification finale. Un compte te donne tout.