En fait, j'en conclu ceci..
Dans une fonction ont peut employer une valeur 'récursive' à l'INTERIEUR de la fonction' mais pas au 'RETOUR' de la fonction.
En fait, j'en conclu ceci..
Dans une fonction ont peut employer une valeur 'récursive' à l'INTERIEUR de la fonction' mais pas au 'RETOUR' de la fonction.
Salut Leforestier...
Une fonction récursive est simple à comprendre, si tu oublies tout simplement le mot fonction ...
Imagine simplement... je ne sais pas, moi... des seaux d'eau, par exemple... ou encore ce que fait une balle de caoutchouc lorsque tu la laisses tomber à la verticale, etc...
Il ne faut pas se laisser impressionner par les "grands mots", juste poser un regard simple...
Si la question est pour moi, la récursivité ne doit arriver à rien
C'est le paramètre qui doit finir par attendre une limite (= vérifier une condition d'arret) au fur et à mesure que la fonction s'appelle elle-même.
Le forum algo serait plus indiqué pour trouver des spécialistes.
Bonjour Maxence45.
Un petit résumé?
Pour reprendre ton exemple, tu connais une formule qui calcule la valeur des carrés des n premiers entiers : S2 = n*(n+1)*(2n+1)/6.
Si tu mets en oeuvre cette formule arithmétique, tu auras une fonction qui marche, mais qui n'a rien de récursif.
Pour mettre en oeuvre une récursivité, il te faut une formule de base qui soit récursive. Dans ton cas on a, comme l'a fait remarquer Fred :
S(n^2) = S((n-1)^2) + n^2. Donc si on appelle f la fonction recherchée:
f(n) = f(n-1) + n^2.
Que veut dire cette expression? Que si je connais la valeur f(n-1), alors je peux calculer celle de f(n). Or je connais la valeur f(1) = 1 et même celle de f(0) qu'on peut décréter à 0. Tu noteras qu'on aurait aussi pu décider que f(0) n'existe pas. C'est un choix de définition.
Donc je connais f(0) et f(1). Donc je sais calculer f(2). Donc je sais calculer f(3) etc...
Reste à mettre en forme. Je vais partir d'une valeur n et sortir de la récursivité à 1 ou 0. Donc je dois décrémenter n à chaque appel.
Si je dis que f(0) = 0 alors
Si on considère que f(0) n'existe pas, alors :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Function fctSomCarre(ByVal n as long) as long if n> 0 Then fctSomCarre = fctSomCarre(n-1) + n^2 ElseIf n = 0 Then fctSomCarre = 0 Else 'n<0 fctSomCarre = -1'pseudo code d'erreur = appel avec n<0 End If End functionEN espérant que cela t'aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Function fctSomCarre(ByVal n as long) as long if n> 1 Then fctSomCarre = fctSomCarre(n-1) + n^2 ElseIf n = 1 Then fctSomCarre =1 Else 'n<=0 fctSomCarre = -1'pseudo code d'erreur = appel avec n<=0 End If End function
PGZ
Incrémenter ou décrémenter ne veut pas dire grand chose en matière de récursivité.
On doit plutôt penser à une évolution et à une borne.
Un ptit conseil à tous....
Prenez mon code dans un poste précédant, annuler le variable Static M
et voyez ce que renvoi le fonction ....(F8)
Ensuite laissez la variable static M et laissez courrir, voyez ce que renvoi la fonction...(F8)
Si vous avez pas compris je recommence.
A+
Hello!
C'est un point de vue.Incrémenter ou décrémenter ne veut pas dire grand chose en matière de récursivité.
Mais si on reprend l'exemple de la somme des n premiers carrés, on peut écrire :
1. f(n) = f(n-1) + n^2. n est décrémenté
2. f(n) = f(n+1) -(n+1)^2? Ici n est incrémeté.
Moi je vois l'intérêt opérationnel de la 1. Mais comment mettre en oeuvre la 2? Quelqu'un se le sent?
J'en conclus que ce n'est pas une question d'opinion mais de qualité opérationnel de la formule. Et dans la pratique, ça décrémente.
PGZ
je débute mais au moins ma question au débutante aura eu le mérite de faire ce petit débat intéressant qui m'a éclairci et peut être éclairci certains...
je conclus que il faut soit ça décrémente , soit ça incrémente , donc c'est la notion de borne et de condition qu'il faut retenir..
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager