Inscription / Connexion Nouveau Sujet
Niveau Licence Maths 1e ann
Partager :

Fonction récursive en C++

Posté par
cocolapraline
06-03-20 à 18:00

Bonjour à tous!
Je voudrais savoir comment on sait comment on écrit une fonction récursive? Je sais qu'une fonction récursive est une fonction qui s'appelle elle-même mais je comprends pas
par exemple pour celle de la factorielle,  pourquoi on écrit a à la fin n*factorielle(n-1).

Merci d'avance ^^!

Posté par
matheuxmatou
re : Fonction récursive en C++ 06-03-20 à 18:39

qu'est ce que tu ne comprends pas ?

n! = n (n-1)!

non ?

Posté par
cocolapraline
re : Fonction récursive en C++ 06-03-20 à 18:59

d'accord, donc on a écrit cette fonction comme ça pour ne pas avoir de boucle infini, est-ce bien ça?  Parce que sinon j'aurai écris à la fin de la fonction "return factorielle (n)" et non "n*return factorielle(n-1)".

Est-ce que le procédé est le même pour toutes les fonctions récursives? En fait je cherche une méthode pour écrire ces fonctions.

Posté par
matheuxmatou
re : Fonction récursive en C++ 06-03-20 à 19:07

ah ben c'est sûr, faut une condition d'arrêt !

comme n! se calcule pour n 1

la condition d'arrêt est

"si n=1 alors retourner 1
...

Posté par
cocolapraline
re : Fonction récursive en C++ 06-03-20 à 19:15

est-ce que vous voulez pas plutôt dire si n=0 alors retourner 1?

Donc il y doit avoir une fonction d'arrêt pour les fonctions récursives. Mais ce que je ne comprends pas c'est que cette fonction d'arrêt ne marche que si n=0 (ou n=1??) non? Je comprends pas bien la notion d'arrêt ici. Ce que j'ai compris, c'est qu'il s'agissait d'une exception de la fonction factorielle, lorsque n=0.
(je ne sais pas si je suis assez clair dans ce que je dis ^^).

Posté par
Ulmiere
re : Fonction récursive en C++ 06-03-20 à 19:23

Si j'écris plutôt

\left\lbrace\begin{array}{lll}u_0 &=& 1\\u_n &=& n\times u_{n-1}\end{array}

Ca passe mieux ? La fonction récursive ici, c'est u : n\mapsto u_n

Posté par
matheuxmatou
re : Fonction récursive en C++ 06-03-20 à 19:24

ce qui n'est pas clair dans ta tête c'est la notion d'algorithme récursif !

fonction Fact(n : entier) : entier
     si n=1 alors
          Fact \leftarrow 1
     sinon
          Fact \leftarrow  n*Fact(n-1)
     fin si
fin fonction

Posté par
cocolapraline
re : Fonction récursive en C++ 06-03-20 à 19:32

hmmm auriez-vous d'autres exemples de fonctions récursives ?

Posté par
cocolapraline
re : Fonction récursive en C++ 06-03-20 à 19:32

qui soient aussi simple que factorielle

Posté par
matheuxmatou
re : Fonction récursive en C++ 06-03-20 à 19:33

si tu ne piges pas celle-ci, qui est la plus simple, cela ne me parait pas nécessaire de compliquer les choses

Posté par
matheuxmatou
re : Fonction récursive en C++ 06-03-20 à 19:34

n'importe quelle suite définie par récurrence comme le suggère Ulmiere

Posté par
phyelec78
re : Fonction récursive en C++ 06-03-20 à 19:36

Bonjour,

la récursivité est une technique de programmation. Par exemple pour le factoriel

sans récursivité :
                 int fact(int n) {
                      int res = 1;
                      for (int i=1; i<=n; i++)
                             res = res*i;
                       return res;
                      }

avec récursivité :
           int fact   (int n){
                if (n==0)
                        return 1;
                 else
                       return fact (n -1)*n;
             }

Posté par
cocolapraline
re : Fonction récursive en C++ 06-03-20 à 19:45

donc la notion de condition d'arrêt est rappelé ici uniquement pour rappeler de ne pas tomber dans le piège de boucle infini? Puisque que ce soit dans les fonctions récursives ou non, on a des conditions d'arrêt.

D'accord pour les suites de récurrences!

Posté par
alb12
re : Fonction récursive en C++ 06-03-20 à 21:48

salut,
tu peux suivre l'evolution de la pile en ajoutant des print dans ta fonction
Par exemple (programme Xcas en français à mi-chemin entre le pseudo code et le C++)


Factorielle(n):={
  local res;
  afficher("empiler: "+n);
  si n<2 alors
    res:=1
  sinon
    res:=n*Factorielle(n-1)
  fsi
  afficher("depiler: "+res)
  retourne res
}
:;

Par exemple Factorielle(5) renvoit 120 et les print donnent:

empiler: 5
empiler: 4
empiler: 3
empiler: 2
empiler: 1
depiler: 1
depiler: 2
depiler: 6
depiler: 24
depiler: 120



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !