Recursivité

Fermé
bejaia Messages postés 1 Date d'inscription mardi 8 novembre 2005 Statut Membre Dernière intervention 14 novembre 2005 - 14 nov. 2005 à 12:56
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 21 sept. 2009 à 20:47
bonjour à tous

jéaimerais savoir qu'est ce que c'est la recursivité dane l'algorithmique et merci d'avance

7 réponses

random Messages postés 1612 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 30 mars 2006 155
14 nov. 2005 à 14:16
la récursivité (d'un mot latin qui veut dire retour) est le
fait pour une fonction ou une procédure de s'appeler soi même.

on va se servir de cette possibilité pour faire itérer un ensemble
de paramètres

par exemple pour factorielle(x)
si x<>1
factorielle=x*factorielle(x-1)

le problème c'est que le système effectue des copies des variables
qui peuvent rapidement saturer le système et que l'utilisateur ne
perçoit pas clairement ce qui se passe


1
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
15 nov. 2005 à 01:57
Une fonction est dite récursive lorsqu'elle s'appelle elle-même. Bien entendu pour ne pas qu'elle s'appelle indéfiniment il faut construire une condition d'arrêt sinon le programme va boucler.

Si l'on reprend l'exemple précédent :

factorielle(n)=n*factorielle(n-1) <-- appel recursif
factorielle(0)=1 <-- condition d'arrêt

Il ne faut pas abuser de la récursivité en programmation car outre le fait que c'est souvent moins lisible qu'une bonne vielle boucle itérative, le volume occupé en mémoire de la pile des appels récursifs à une forte tendance à gonfler. En effet pour calculer factorielle(3) :
factorielle(3)=3*factorielle(2)
  factorielle(2)=2*factorielle(1)
    factorielle(1)=1*factorielle(0)
      factorielle(1)=1*1 <-- condition d'arret

Comme on connait factorielle 0 on peut remonter la pile des appels
    factorielle(1)=1
  factorielle(2)=2*1=2
factorielle(3)=3*2=6

On a dû mémoriser la suite d'appel ce qui est mauvais car ici on pouvait mieux faire :
int i,fact=1;
for(i=1;i<=n;++i){
   fact=fact*i; 
  // la seule chose utilisée pour le calcul est le résultat intermediaire (valeur fact)
}
return fact;

La récursivité est employé dans certains cas bien précis : l'exploration d'un arbre (par exemple dans un branch and bound) est sans doute l'exemple le plus représentatif.

Bonne chance
1
calaceite Messages postés 159 Date d'inscription vendredi 1 novembre 2002 Statut Membre Dernière intervention 23 avril 2007 10
15 nov. 2005 à 11:22
Je ne vois pas trop ton histoire d'algorithme récursif branch & bound dans un arbre. En revanche, beaucoup d'algorithmes ont une version naturelle et simple sous forme récursive. Quelques exemples :

*) le DFS (recherche en profondeur dans gaphe) s'exprime très simplement de la sorte ;

*) l'algorithme de tri le plus implémenté (quicksort) est récursif (la version itérative est d'implémentation compliquée). Un des algorithmes par comparaisons les plus rapides, asymptotiquement en tout cas, (le tri fusion) est récursif ;

*) la FFT ou encore Karatsuba pour la multiplication de grans entiers sont récursifs.


Calaz
0
personnellement g étudié cela en premiére année IAG et j'étais comme vous .
la récursivité et une fonction qui appelle elle même donc en faite c presque une boucle(le même principe)donc elle doit avoir une condition d'arrêt .
prend n'importe quel exemple et essayez de l'exécuter à la main et vous allez bien comprendre ;le plus populaire exemple qui utulisent les débutants est le factoriel d'un entier et la puissance d'un nombre .
On utilise surtout la recursivité pour parcourir un arbre.
essayez et si vous n'avez pas encore compris envoyer moi un mail et j'essaierai d'être plus claire la prochaine fois
0
slt asma chui mohamed etdiant en premiere année d une ecole d ingenieur je veux bien que tu sois plus clair é donné moi des expl sur la recursivité en c
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
15 nov. 2005 à 22:33
Pourtant un ca se fait classiquement dans un arbre (cf intelligence artificielle algo min max, recherche opérationnelle branch & bound ou branch & cut). On peut toujours le faire en iteratif mais bonjour la lourdeur de l'algo niveau implementation...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
salut je suis en 1ere annee ei, j'ai un projet que je doit faire sur la recursivité, mais j'ai eu un peu de difficulté, le projet demande d'etudier les inconvenients de la recursivité a travers 2 exemples :
* forme generalisé du factoriel :
nvfact(0,k)=k
nvfact(n,k)=nvfact(n-1,k*n)

* polynome d'hermite hn(x) donne par :
h0(x)=1 h1(x)=2x
hn(x)=2x*hn-1(x)-2(n-1)*hn-2(x) pour n>1

j'aimerai bien avoir des informations et des consignes sur ce petit projet s.v.p
a l'attente d'une reponse :d
merci d'avance
0
bonjour à tous;
est il possible d'avoir des instructions avant le 'si' d'une procédure récursive??
merci d'avance
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
21 sept. 2009 à 20:47
Oui.
0