OVH Cloud OVH Cloud

miracle de la récursion

52 réponses
Avatar
Christophe
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 ?
Quelqu'un pourrait il m'éclairer ?
Merci d'avance

Christophe

2 réponses

2 3 4 5 6
Avatar
Gabriel Dos Reis
"Alain Naigeon" writes:

| "Gabriel Dos Reis" a écrit dans le message
| news:
| > "Alain Naigeon" writes:
| > | : dès lors
| > | qu'il n'y aura jamais exécution, en quoi la validité est-elle
| > | nécessaire ??
| >
| > Parce que le fait qu'une instruction soit grammaticallement correcte
| > est indépendante de ce qu'elle soit effectivement exécutée.
|
| Ma question était : pourquoi exiges-tu la correction grammaticale
| pour du code dont une instruction valide [ if( false) ] exclut qu'il
| soit jamais exécuté ?

Parce que le fait que tu saches que le code ne sera jamais exécuté est
un cas *particulier* de la situation générale

if (condition)

où condition est une expression générale qui peut se convertir en
valeur booléenne. De manière générale, on ne sait pas à la compilation
laquelle des deux branches sera exécutée, donc on vérifie les deux.
C'est une règle générale, simple à énoncer. Construire un langage de
programmation comme une accumulation de cas particuliers est un très
bon moyen pour avoir un langage incohérent, difficile à comprendre et
å utiliser -- tu ne devrais pas avoir du mal à trouver des exemples
qui illustrent ce point (hint: vector<T>(20, 4) :-)

| Est-ce que la compilation est une esthétique,
| ou une pratique ?

Pratique.

| Et cette fois c'est moi qui demande ça ;-)

Si tu ne veux pas une vérification grammaticale, C++ a fournit au
moins deux moyens de s'en passer :

(1) utilise une directive préprocesseur d'inclusion conditionnelle ;
(2) utilise les commentaires.

-- Gaby
Avatar
Loïc Joly
Alain Naigeon wrote:

Moi, déjà, ce que je comprends pas, c'est "let f x =" [avec ou sans rec]
Ca s'écrit comment en C++ ?



T f (U x)
{
}

Avec T et U des types déduites par le système d'inférence de type.

--
Loïc

2 3 4 5 6