{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
La suite de Fibonnacci est une suite de nombres dont chacun est la somme des deux précédents.
Le premier et le second nombres sont égaux à 1.
On obtient la suite de nombres : 1 - 1 - 2 - 3 - 5 - 8 - 13 - 21 - ...
Mathématiquement, cette suite notée (Fn) est donc définie par :
\n", "Ecrivez une fonction récursive fibo(n) qui renvoie le terme de rang n de cette suite. Attention : il y a deux cas de base.
" ] }, { "cell_type": "code", "execution_count": null, "id": "1b47b2c4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Un algorithme récursif simple est terminal lorsque l’appel récursif est le dernier calcul effectué pour obtenir le résultat.
Il n’y a pas de \"calcul en attente\". L’avantage est qu’il n’y a rien à mémoriser dans la pile.
Pour rendre terminal un algorithme récursif, on utilise un accumulateur placé en paramètre.
\n",
"Voici la fonction factorielle en récursivité terminale :
Une autre définition possible de fonction f récursive terminale est quand tout appel récursif est de la forme return f(...); sans qu'il n'y ait aucune opération sur cette valeur.
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ecrire occt une fonction version récursif terminal de la fonction occ
" ] }, { "cell_type": "code", "execution_count": null, "id": "5db2890e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "29469f30", "metadata": {}, "source": [ "On parle de récursivité croisée lorsque deux fonctions s’appellent l’une l’autre récursivement.
\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "614101d0", "metadata": {}, "outputs": [], "source": [ "# Exemple typique (et très classique) :\n", "def pair(n):\n", " if n == 0:\n", " return True\n", " else:\n", " return impair(n-1)\n", "\n", "def impair(n):\n", " if n == 0:\n", " return False\n", " else:\n", " return pair(n-1)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Détailler sur feuille l'appel de fonction : pair(7)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.13" } }, "nbformat": 4, "nbformat_minor": 5 }