Bonjour
1 int queSuisJe( int* Tablo, const int TailleTablo )
2 {
3 if ( TailleTablo == 1 )
4 return Tablo[0];
5 else
6 return Tablo[TailleTablo - 1] + queSuisJe( Tablo, TailleTablo - 1 );
7 }
Je ne comprends pas comment le Tablo[0] de la ligne 4 peut stocker le
résultat ?
Il ne stocke pas le résultat. Le résultat est transmit de fonctions en
Quelqu'un pourrait il m'éclairer ?
Bonjour
1 int queSuisJe( int* Tablo, const int TailleTablo )
2 {
3 if ( TailleTablo == 1 )
4 return Tablo[0];
5 else
6 return Tablo[TailleTablo - 1] + queSuisJe( Tablo, TailleTablo - 1 );
7 }
Je ne comprends pas comment le Tablo[0] de la ligne 4 peut stocker le
résultat ?
Il ne stocke pas le résultat. Le résultat est transmit de fonctions en
Quelqu'un pourrait il m'éclairer ?
Bonjour
1 int queSuisJe( int* Tablo, const int TailleTablo )
2 {
3 if ( TailleTablo == 1 )
4 return Tablo[0];
5 else
6 return Tablo[TailleTablo - 1] + queSuisJe( Tablo, TailleTablo - 1 );
7 }
Je ne comprends pas comment le Tablo[0] de la ligne 4 peut stocker le
résultat ?
Il ne stocke pas le résultat. Le résultat est transmit de fonctions en
Quelqu'un pourrait il m'éclairer ?
Christophe wrote:Bonjour
1 int queSuisJe( int* Tablo, const int TailleTablo )
2 {
3 if ( TailleTablo == 1 )
4 return Tablo[0];
5 else
6 return Tablo[TailleTablo - 1] + queSuisJe( Tablo, TailleTablo -
1 );
7 }
Je ne comprends pas comment le Tablo[0] de la ligne 4 peut stocker le
résultat ?
Il ne stocke pas le résultat. Le résultat est transmit de fonctions en
fonction par le return.Quelqu'un pourrait il m'éclairer ?
Peut être en prenant le problème à l'envers ?
Si TailleTablo == 1
On retourne Tablo[0]
Si TailleTablo == 2
On retourne Tablo[1] + queSuisJe(Tablo, 1), c'est à dire Tablo[0] +
Tablo[1]
Si TailleTablo == 3
On retourne Tablo[2] + queSuisJe(Tablo, 2), c'est à dire
Tablo[0]+Tablo[1]+Tablo[2]
Si TailleTablo == 4
On retourne Tablo[3] + queSuisJe(Tablo, 2), c'est à dire
Tablo[0]+Tablo[1]+Tablo[2]+Tablo[3]
....
Si TailleTablo == n
On retourne Tablo[n-1] + queSuisJe(Tablo, n-1), c'est à dire la somme
des n premiers éléments (numéroté de 0 à [n-1]) de Tablo.
--
Loïc
J'imagine que c'est le compilateur qui, voyant que la fonction est
Christophe wrote:
Bonjour
1 int queSuisJe( int* Tablo, const int TailleTablo )
2 {
3 if ( TailleTablo == 1 )
4 return Tablo[0];
5 else
6 return Tablo[TailleTablo - 1] + queSuisJe( Tablo, TailleTablo -
1 );
7 }
Je ne comprends pas comment le Tablo[0] de la ligne 4 peut stocker le
résultat ?
Il ne stocke pas le résultat. Le résultat est transmit de fonctions en
fonction par le return.
Quelqu'un pourrait il m'éclairer ?
Peut être en prenant le problème à l'envers ?
Si TailleTablo == 1
On retourne Tablo[0]
Si TailleTablo == 2
On retourne Tablo[1] + queSuisJe(Tablo, 1), c'est à dire Tablo[0] +
Tablo[1]
Si TailleTablo == 3
On retourne Tablo[2] + queSuisJe(Tablo, 2), c'est à dire
Tablo[0]+Tablo[1]+Tablo[2]
Si TailleTablo == 4
On retourne Tablo[3] + queSuisJe(Tablo, 2), c'est à dire
Tablo[0]+Tablo[1]+Tablo[2]+Tablo[3]
....
Si TailleTablo == n
On retourne Tablo[n-1] + queSuisJe(Tablo, n-1), c'est à dire la somme
des n premiers éléments (numéroté de 0 à [n-1]) de Tablo.
--
Loïc
J'imagine que c'est le compilateur qui, voyant que la fonction est
Christophe wrote:Bonjour
1 int queSuisJe( int* Tablo, const int TailleTablo )
2 {
3 if ( TailleTablo == 1 )
4 return Tablo[0];
5 else
6 return Tablo[TailleTablo - 1] + queSuisJe( Tablo, TailleTablo -
1 );
7 }
Je ne comprends pas comment le Tablo[0] de la ligne 4 peut stocker le
résultat ?
Il ne stocke pas le résultat. Le résultat est transmit de fonctions en
fonction par le return.Quelqu'un pourrait il m'éclairer ?
Peut être en prenant le problème à l'envers ?
Si TailleTablo == 1
On retourne Tablo[0]
Si TailleTablo == 2
On retourne Tablo[1] + queSuisJe(Tablo, 1), c'est à dire Tablo[0] +
Tablo[1]
Si TailleTablo == 3
On retourne Tablo[2] + queSuisJe(Tablo, 2), c'est à dire
Tablo[0]+Tablo[1]+Tablo[2]
Si TailleTablo == 4
On retourne Tablo[3] + queSuisJe(Tablo, 2), c'est à dire
Tablo[0]+Tablo[1]+Tablo[2]+Tablo[3]
....
Si TailleTablo == n
On retourne Tablo[n-1] + queSuisJe(Tablo, n-1), c'est à dire la somme
des n premiers éléments (numéroté de 0 à [n-1]) de Tablo.
--
Loïc
J'imagine que c'est le compilateur qui, voyant que la fonction est
"Loïc Joly" a écrit dans le message deBonjour
1 int queSuisJe( int* Tablo, const int TailleTablo )
2 {
3 if ( TailleTablo == 1 )
4 return Tablo[0];
5 else
6 return Tablo[TailleTablo - 1] + queSuisJe( Tablo, TailleTablo - 1 );
7 }
Peut être en prenant le problème à l'envers ?
Si TailleTablo == 1
On retourne Tablo[0]
Si TailleTablo == n
On retourne Tablo[n-1] + queSuisJe(Tablo, n-1), c'est à dire la somme
des n premiers éléments (numéroté de 0 à [n-1]) de Tablo.
--
Loïc
J'imagine que c'est le compilateur qui, voyant que la fonction est
récursive, va totalement modifier le code de manière à renvoyer non pas un
nombre, mais une somme de nombre. En fait c'est le compilateur qui va faire
un gros travail dès qu'il reconnait une fonction récursive.
Je me trompe ?
Oui :-)
"Loïc Joly" <loic.actarus.joly@wanadoo.fr> a écrit dans le message de
Bonjour
1 int queSuisJe( int* Tablo, const int TailleTablo )
2 {
3 if ( TailleTablo == 1 )
4 return Tablo[0];
5 else
6 return Tablo[TailleTablo - 1] + queSuisJe( Tablo, TailleTablo - 1 );
7 }
Peut être en prenant le problème à l'envers ?
Si TailleTablo == 1
On retourne Tablo[0]
Si TailleTablo == n
On retourne Tablo[n-1] + queSuisJe(Tablo, n-1), c'est à dire la somme
des n premiers éléments (numéroté de 0 à [n-1]) de Tablo.
--
Loïc
J'imagine que c'est le compilateur qui, voyant que la fonction est
récursive, va totalement modifier le code de manière à renvoyer non pas un
nombre, mais une somme de nombre. En fait c'est le compilateur qui va faire
un gros travail dès qu'il reconnait une fonction récursive.
Je me trompe ?
Oui :-)
"Loïc Joly" a écrit dans le message deBonjour
1 int queSuisJe( int* Tablo, const int TailleTablo )
2 {
3 if ( TailleTablo == 1 )
4 return Tablo[0];
5 else
6 return Tablo[TailleTablo - 1] + queSuisJe( Tablo, TailleTablo - 1 );
7 }
Peut être en prenant le problème à l'envers ?
Si TailleTablo == 1
On retourne Tablo[0]
Si TailleTablo == n
On retourne Tablo[n-1] + queSuisJe(Tablo, n-1), c'est à dire la somme
des n premiers éléments (numéroté de 0 à [n-1]) de Tablo.
--
Loïc
J'imagine que c'est le compilateur qui, voyant que la fonction est
récursive, va totalement modifier le code de manière à renvoyer non pas un
nombre, mais une somme de nombre. En fait c'est le compilateur qui va faire
un gros travail dès qu'il reconnait une fonction récursive.
Je me trompe ?
Oui :-)
J'imagine que c'est le compilateur qui, voyant que la fonction est
récursive, va totalement modifier le code de manière à renvoyer non pas un
nombre, mais une somme de nombre. En fait c'est le compilateur qui va
faire
un gros travail dès qu'il reconnait une fonction récursive.
Je me trompe ?
Oui, je le crains. Mais c'est presque normal dans un premier temps.
Christophe Cro-magon à la recherche de l'eau tiède.
Très bonne démarche.
J'imagine que c'est le compilateur qui, voyant que la fonction est
récursive, va totalement modifier le code de manière à renvoyer non pas un
nombre, mais une somme de nombre. En fait c'est le compilateur qui va
faire
un gros travail dès qu'il reconnait une fonction récursive.
Je me trompe ?
Oui, je le crains. Mais c'est presque normal dans un premier temps.
Christophe Cro-magon à la recherche de l'eau tiède.
Très bonne démarche.
J'imagine que c'est le compilateur qui, voyant que la fonction est
récursive, va totalement modifier le code de manière à renvoyer non pas un
nombre, mais une somme de nombre. En fait c'est le compilateur qui va
faire
un gros travail dès qu'il reconnait une fonction récursive.
Je me trompe ?
Oui, je le crains. Mais c'est presque normal dans un premier temps.
Christophe Cro-magon à la recherche de l'eau tiède.
Très bonne démarche.
Le reste est question d'implémentation. Comprendre physiquement comment ça
se passe en aider certains (c'est mon cas) et en confuser d'autres. Sur
x86
(et sans doute beaucoup d'autres hards), c'est une gestion particulière de
la pile qui est mise en oeuvre. Pour plus de renseignements, vous pouvez
Googliser sur la base de "cadre de pile", "stack frame"
Le reste est question d'implémentation. Comprendre physiquement comment ça
se passe en aider certains (c'est mon cas) et en confuser d'autres. Sur
x86
(et sans doute beaucoup d'autres hards), c'est une gestion particulière de
la pile qui est mise en oeuvre. Pour plus de renseignements, vous pouvez
Googliser sur la base de "cadre de pile", "stack frame"
Le reste est question d'implémentation. Comprendre physiquement comment ça
se passe en aider certains (c'est mon cas) et en confuser d'autres. Sur
x86
(et sans doute beaucoup d'autres hards), c'est une gestion particulière de
la pile qui est mise en oeuvre. Pour plus de renseignements, vous pouvez
Googliser sur la base de "cadre de pile", "stack frame"
"Pierre Maurette" <mmaauurreettttttee.ppiieerrrree@@ffrreeee.ffrr> a écrit
dans le message de news: 3fdb441e$0$24047$
Le reste est question d'implémentation. Comprendre physiquement comment
ça
se passe en aider certains (c'est mon cas) et en confuser d'autres. Sur
x86(et sans doute beaucoup d'autres hards), c'est une gestion particulière
de
la pile qui est mise en oeuvre. Pour plus de renseignements, vous pouvez
Googliser sur la base de "cadre de pile", "stack frame"
Pourquoi une gestion "particuliere" ?
Qu'a-t-elle de particuliere ?
Je faisais allusion à la notion de stack frame, au transfert ESP dans EBP,
Que font les architectures qui n'utilisent pas de pile dans
ce cas ?
Je l'ignore, j'imagine que de toute façons, une pile de données est gérée
"Pierre Maurette" <mmaauurreettttttee.ppiieerrrree@@ffrreeee.ffrr> a écrit
dans le message de news: 3fdb441e$0$24047$626a54ce@news.free.fr...
Le reste est question d'implémentation. Comprendre physiquement comment
ça
se passe en aider certains (c'est mon cas) et en confuser d'autres. Sur
x86
(et sans doute beaucoup d'autres hards), c'est une gestion particulière
de
la pile qui est mise en oeuvre. Pour plus de renseignements, vous pouvez
Googliser sur la base de "cadre de pile", "stack frame"
Pourquoi une gestion "particuliere" ?
Qu'a-t-elle de particuliere ?
Je faisais allusion à la notion de stack frame, au transfert ESP dans EBP,
Que font les architectures qui n'utilisent pas de pile dans
ce cas ?
Je l'ignore, j'imagine que de toute façons, une pile de données est gérée
"Pierre Maurette" <mmaauurreettttttee.ppiieerrrree@@ffrreeee.ffrr> a écrit
dans le message de news: 3fdb441e$0$24047$
Le reste est question d'implémentation. Comprendre physiquement comment
ça
se passe en aider certains (c'est mon cas) et en confuser d'autres. Sur
x86(et sans doute beaucoup d'autres hards), c'est une gestion particulière
de
la pile qui est mise en oeuvre. Pour plus de renseignements, vous pouvez
Googliser sur la base de "cadre de pile", "stack frame"
Pourquoi une gestion "particuliere" ?
Qu'a-t-elle de particuliere ?
Je faisais allusion à la notion de stack frame, au transfert ESP dans EBP,
Que font les architectures qui n'utilisent pas de pile dans
ce cas ?
Je l'ignore, j'imagine que de toute façons, une pile de données est gérée
Un point très important pour la compréhension : les paramètres passés à
une
fonction ne sont rien d'autre que des variables locales initialisées par
l'appelant (on oublie ici les paramètres référence).
A chaque appel d'une fonction pour lequel le return n'a pas été atteint
correspond donc "quelque part" un groupe de variables locales toujours
"vivantes".
Un point très important pour la compréhension : les paramètres passés à
une
fonction ne sont rien d'autre que des variables locales initialisées par
l'appelant (on oublie ici les paramètres référence).
A chaque appel d'une fonction pour lequel le return n'a pas été atteint
correspond donc "quelque part" un groupe de variables locales toujours
"vivantes".
Un point très important pour la compréhension : les paramètres passés à
une
fonction ne sont rien d'autre que des variables locales initialisées par
l'appelant (on oublie ici les paramètres référence).
A chaque appel d'une fonction pour lequel le return n'a pas été atteint
correspond donc "quelque part" un groupe de variables locales toujours
"vivantes".
Que font les architectures qui n'utilisent pas de pile dans ce cas ?
Que font les architectures qui n'utilisent pas de pile dans ce cas ?
Que font les architectures qui n'utilisent pas de pile dans ce cas ?
"Pierre Maurette" <mmaauurreettttttee.ppiieerrrree@@ffrreeee.ffrr> writes:
|> "Christophe" a écrit
|> [...]
|> > J'imagine que c'est le compilateur qui, voyant que la fonction est
|> > récursive, va totalement modifier le code de manière à
|> > renvoyer non pas un nombre, mais une somme de nombre. En fait
|> > c'est le compilateur qui va faire un gros travail dès qu'il
|> > reconnait une fonction récursive. Je me trompe ?
|> Oui, je le crains.
Je ne crois pas. La plupart des compilateurs C++ que je connais traitent
un appel récursif exactement comme n'importe autre appel de fonction.
C'est exactement ce que j'ai écrit : Christophe demande s'il se trompe en
Je ne suis pas sûr ce que tu essaies à dire. Le C et le C++
garantissent que les appels récursifs (directs ou indirects)
fonctionnent, dans la mesure qu'on n'épuise pas les ressources
système (pile). Je ne sais pas ce que tu veux de plus -- Lisp (un
langage récursif par excellence) n'en dit pas plus.
Pas vu cette garantie dans les normes C99 et C++98, en tous cas aucune
En revanche, l'utilisation de la récursion grauitement n'est pas un
idiome classique de C++, et le langage offre de nombreux autres
constructions comme les boucles.
Certainement. le calcul d'une factorielle par récursion est calamiteux en
Une solution comme celle proposée ne
serait pas considérée une bonne solution C++,
Certes, mais ce que fait Christophe est certainement une façon de faire un
"Pierre Maurette" <mmaauurreettttttee.ppiieerrrree@@ffrreeee.ffrr> writes:
|> "Christophe" <chrschneider@free.fr> a écrit
|> [...]
|> > J'imagine que c'est le compilateur qui, voyant que la fonction est
|> > récursive, va totalement modifier le code de manière à
|> > renvoyer non pas un nombre, mais une somme de nombre. En fait
|> > c'est le compilateur qui va faire un gros travail dès qu'il
|> > reconnait une fonction récursive. Je me trompe ?
|> Oui, je le crains.
Je ne crois pas. La plupart des compilateurs C++ que je connais traitent
un appel récursif exactement comme n'importe autre appel de fonction.
C'est exactement ce que j'ai écrit : Christophe demande s'il se trompe en
Je ne suis pas sûr ce que tu essaies à dire. Le C et le C++
garantissent que les appels récursifs (directs ou indirects)
fonctionnent, dans la mesure qu'on n'épuise pas les ressources
système (pile). Je ne sais pas ce que tu veux de plus -- Lisp (un
langage récursif par excellence) n'en dit pas plus.
Pas vu cette garantie dans les normes C99 et C++98, en tous cas aucune
En revanche, l'utilisation de la récursion grauitement n'est pas un
idiome classique de C++, et le langage offre de nombreux autres
constructions comme les boucles.
Certainement. le calcul d'une factorielle par récursion est calamiteux en
Une solution comme celle proposée ne
serait pas considérée une bonne solution C++,
Certes, mais ce que fait Christophe est certainement une façon de faire un
"Pierre Maurette" <mmaauurreettttttee.ppiieerrrree@@ffrreeee.ffrr> writes:
|> "Christophe" a écrit
|> [...]
|> > J'imagine que c'est le compilateur qui, voyant que la fonction est
|> > récursive, va totalement modifier le code de manière à
|> > renvoyer non pas un nombre, mais une somme de nombre. En fait
|> > c'est le compilateur qui va faire un gros travail dès qu'il
|> > reconnait une fonction récursive. Je me trompe ?
|> Oui, je le crains.
Je ne crois pas. La plupart des compilateurs C++ que je connais traitent
un appel récursif exactement comme n'importe autre appel de fonction.
C'est exactement ce que j'ai écrit : Christophe demande s'il se trompe en
Je ne suis pas sûr ce que tu essaies à dire. Le C et le C++
garantissent que les appels récursifs (directs ou indirects)
fonctionnent, dans la mesure qu'on n'épuise pas les ressources
système (pile). Je ne sais pas ce que tu veux de plus -- Lisp (un
langage récursif par excellence) n'en dit pas plus.
Pas vu cette garantie dans les normes C99 et C++98, en tous cas aucune
En revanche, l'utilisation de la récursion grauitement n'est pas un
idiome classique de C++, et le langage offre de nombreux autres
constructions comme les boucles.
Certainement. le calcul d'une factorielle par récursion est calamiteux en
Une solution comme celle proposée ne
serait pas considérée une bonne solution C++,
Certes, mais ce que fait Christophe est certainement une façon de faire un