In article ,
d'apprentissages de la programmation structuree: il n'y a rien de
naturel dans une construction telle que
i = i + 1;
mais bon, des annees d'explications de comment ca marche, des petites
cases memoire, et tout ca, conduisent a une vision etriquee de l'informatique
et du fonctionnement des machines.
Et entre devoir ecrire explicitement mes invariants de boucle et mes
conditions d'arret, ou avoir du recursif qui se prouve "naturellement" avec
une belle equation, le recursif c'est souvent plus simple.
Juste un petit bout de point de vue.
Les variables du procedural, les boucles qui vont avec, c'est une vision
tres proche de la machine.
Oublier un peu tout ca, faire du fonctionnel propre, avec de la recursion,
c'est souvent une bonne facon de s'elargir les horizons.
Allez, une petite fonction recursive pour la route.
unsigned int
pgcd(unsigned int a, unsigned int b)
{
if (a < b)
return pgcd(b, a);
else if (b == 0)
return a;
else
return pgcd(b, a % b);
}
In article <d27e61cf-0ad2-410c-ba7c-9c5be3cf1ce6@j24g2000yqa.googlegroups.com>,
d'apprentissages de la programmation structuree: il n'y a rien de
naturel dans une construction telle que
i = i + 1;
mais bon, des annees d'explications de comment ca marche, des petites
cases memoire, et tout ca, conduisent a une vision etriquee de l'informatique
et du fonctionnement des machines.
Et entre devoir ecrire explicitement mes invariants de boucle et mes
conditions d'arret, ou avoir du recursif qui se prouve "naturellement" avec
une belle equation, le recursif c'est souvent plus simple.
Juste un petit bout de point de vue.
Les variables du procedural, les boucles qui vont avec, c'est une vision
tres proche de la machine.
Oublier un peu tout ca, faire du fonctionnel propre, avec de la recursion,
c'est souvent une bonne facon de s'elargir les horizons.
Allez, une petite fonction recursive pour la route.
unsigned int
pgcd(unsigned int a, unsigned int b)
{
if (a < b)
return pgcd(b, a);
else if (b == 0)
return a;
else
return pgcd(b, a % b);
}
In article ,
d'apprentissages de la programmation structuree: il n'y a rien de
naturel dans une construction telle que
i = i + 1;
mais bon, des annees d'explications de comment ca marche, des petites
cases memoire, et tout ca, conduisent a une vision etriquee de l'informatique
et du fonctionnement des machines.
Et entre devoir ecrire explicitement mes invariants de boucle et mes
conditions d'arret, ou avoir du recursif qui se prouve "naturellement" avec
une belle equation, le recursif c'est souvent plus simple.
Juste un petit bout de point de vue.
Les variables du procedural, les boucles qui vont avec, c'est une vision
tres proche de la machine.
Oublier un peu tout ca, faire du fonctionnel propre, avec de la recursion,
c'est souvent une bonne facon de s'elargir les horizons.
Allez, une petite fonction recursive pour la route.
unsigned int
pgcd(unsigned int a, unsigned int b)
{
if (a < b)
return pgcd(b, a);
else if (b == 0)
return a;
else
return pgcd(b, a % b);
}
Une fois de plus, si on dit que l'itération est humaine et la récursion
divine, ce n'est pas pour rien : il y a vraiment une difficulté à
_vraiment_ comprendre la récursivité.
Une fois de plus, si on dit que l'itération est humaine et la récursion
divine, ce n'est pas pour rien : il y a vraiment une difficulté à
_vraiment_ comprendre la récursivité.
Une fois de plus, si on dit que l'itération est humaine et la récursion
divine, ce n'est pas pour rien : il y a vraiment une difficulté à
_vraiment_ comprendre la récursivité.
absolument mais ta "programmation structurée" (je sais pas trop ce que
ça recouvre à vrai dire, c'est un truc que je lis de temps en temps) n'a
rien à voir là dedans. Pose la question à un, deux, dix débutants (mais
en vois-tu dans ton école ?) qui _découvre_ une expression comme i=i+1
et tu auras la réponse.
mais bon, des annees d'explications de comment ca marche, des petites
cases memoire, et tout ca, conduisent a une vision etriquee de l'informatique
et du fonctionnement des machines.
Quand on programme, y compris en C, a-t-on nécessairement besoin de
connaître le fonctionnement des machines. Les variables sont des
abstractions.
Et entre devoir ecrire explicitement mes invariants de boucle et mes
conditions d'arret, ou avoir du recursif qui se prouve "naturellement" avec
une belle equation, le recursif c'est souvent plus simple.
Exemple ?
Les variables du procedural, les boucles qui vont avec, c'est une vision
tres proche de la machine.
Non, c'est juste chez toi de la déformation professionnelle.
Oublier un peu tout ca, faire du fonctionnel propre, avec de la recursion,
c'est souvent une bonne facon de s'elargir les horizons.
Ah ben oui mais faut savoir ce qu'on veut : apprendre à programmer en C
ou se faire un culture G pour discuter devant la machine à café ;)
unsigned int
pgcd(unsigned int a, unsigned int b)
{
if (a < b)
return pgcd(b, a);
else if (b == 0)
return a;
else
return pgcd(b, a % b);
}
"Peut mieux faire", j'ai envie de dire car un détail dans l'algorithme
d'Euclide t'a échappé : ta première ligne ne sert à rien car si a<b
alors, dans ton appel récursif pgcd(b, a%b), le deuxième argument sera
a. Et cette cascade de trois return, c'est pas très C.
Le code plus ou moins standard du pgcd récursif est :
int pgcd(int a, int b)
{
return b ? pgcd(b, a % b) : a ;
}
absolument mais ta "programmation structurée" (je sais pas trop ce que
ça recouvre à vrai dire, c'est un truc que je lis de temps en temps) n'a
rien à voir là dedans. Pose la question à un, deux, dix débutants (mais
en vois-tu dans ton école ?) qui _découvre_ une expression comme i=i+1
et tu auras la réponse.
mais bon, des annees d'explications de comment ca marche, des petites
cases memoire, et tout ca, conduisent a une vision etriquee de l'informatique
et du fonctionnement des machines.
Quand on programme, y compris en C, a-t-on nécessairement besoin de
connaître le fonctionnement des machines. Les variables sont des
abstractions.
Et entre devoir ecrire explicitement mes invariants de boucle et mes
conditions d'arret, ou avoir du recursif qui se prouve "naturellement" avec
une belle equation, le recursif c'est souvent plus simple.
Exemple ?
Les variables du procedural, les boucles qui vont avec, c'est une vision
tres proche de la machine.
Non, c'est juste chez toi de la déformation professionnelle.
Oublier un peu tout ca, faire du fonctionnel propre, avec de la recursion,
c'est souvent une bonne facon de s'elargir les horizons.
Ah ben oui mais faut savoir ce qu'on veut : apprendre à programmer en C
ou se faire un culture G pour discuter devant la machine à café ;)
unsigned int
pgcd(unsigned int a, unsigned int b)
{
if (a < b)
return pgcd(b, a);
else if (b == 0)
return a;
else
return pgcd(b, a % b);
}
"Peut mieux faire", j'ai envie de dire car un détail dans l'algorithme
d'Euclide t'a échappé : ta première ligne ne sert à rien car si a<b
alors, dans ton appel récursif pgcd(b, a%b), le deuxième argument sera
a. Et cette cascade de trois return, c'est pas très C.
Le code plus ou moins standard du pgcd récursif est :
int pgcd(int a, int b)
{
return b ? pgcd(b, a % b) : a ;
}
absolument mais ta "programmation structurée" (je sais pas trop ce que
ça recouvre à vrai dire, c'est un truc que je lis de temps en temps) n'a
rien à voir là dedans. Pose la question à un, deux, dix débutants (mais
en vois-tu dans ton école ?) qui _découvre_ une expression comme i=i+1
et tu auras la réponse.
mais bon, des annees d'explications de comment ca marche, des petites
cases memoire, et tout ca, conduisent a une vision etriquee de l'informatique
et du fonctionnement des machines.
Quand on programme, y compris en C, a-t-on nécessairement besoin de
connaître le fonctionnement des machines. Les variables sont des
abstractions.
Et entre devoir ecrire explicitement mes invariants de boucle et mes
conditions d'arret, ou avoir du recursif qui se prouve "naturellement" avec
une belle equation, le recursif c'est souvent plus simple.
Exemple ?
Les variables du procedural, les boucles qui vont avec, c'est une vision
tres proche de la machine.
Non, c'est juste chez toi de la déformation professionnelle.
Oublier un peu tout ca, faire du fonctionnel propre, avec de la recursion,
c'est souvent une bonne facon de s'elargir les horizons.
Ah ben oui mais faut savoir ce qu'on veut : apprendre à programmer en C
ou se faire un culture G pour discuter devant la machine à café ;)
unsigned int
pgcd(unsigned int a, unsigned int b)
{
if (a < b)
return pgcd(b, a);
else if (b == 0)
return a;
else
return pgcd(b, a % b);
}
"Peut mieux faire", j'ai envie de dire car un détail dans l'algorithme
d'Euclide t'a échappé : ta première ligne ne sert à rien car si a<b
alors, dans ton appel récursif pgcd(b, a%b), le deuxième argument sera
a. Et cette cascade de trois return, c'est pas très C.
Le code plus ou moins standard du pgcd récursif est :
int pgcd(int a, int b)
{
return b ? pgcd(b, a % b) : a ;
}
> La "tarte à la crème" c'est de faire croire qu'on peut se dispenser de
comprendre la récursivité quand on est programmeur. Ceci est totalement
faux.
Tout algorithme qui requiert un automate à pile est souvent beaucoup
plus facile à coder de façon récursive (exemple : la reconnaissance
syntaxique des expressions arithmétiques).
Et puis nombre d'algorithmes sur les arbres, voire les listes, sont bien
plus faciles à programmer de façon récursive.
La récursivité est un concept clé de la programmation (et de
l'informatique et des mathématiques en général).
> La "tarte à la crème" c'est de faire croire qu'on peut se dispenser de
comprendre la récursivité quand on est programmeur. Ceci est totalement
faux.
Tout algorithme qui requiert un automate à pile est souvent beaucoup
plus facile à coder de façon récursive (exemple : la reconnaissance
syntaxique des expressions arithmétiques).
Et puis nombre d'algorithmes sur les arbres, voire les listes, sont bien
plus faciles à programmer de façon récursive.
La récursivité est un concept clé de la programmation (et de
l'informatique et des mathématiques en général).
> La "tarte à la crème" c'est de faire croire qu'on peut se dispenser de
comprendre la récursivité quand on est programmeur. Ceci est totalement
faux.
Tout algorithme qui requiert un automate à pile est souvent beaucoup
plus facile à coder de façon récursive (exemple : la reconnaissance
syntaxique des expressions arithmétiques).
Et puis nombre d'algorithmes sur les arbres, voire les listes, sont bien
plus faciles à programmer de façon récursive.
La récursivité est un concept clé de la programmation (et de
l'informatique et des mathématiques en général).
In article ,
Erwan David wrote:ça c'est mon historique de développeur embarqué qui parle...
Ca veut juste dire que tu optimises la recursion terminale a la main
en presence de compilateurs deficients...
In article <m2d431ttx2.fsf@minuetto.depot.rail.eu.org>,
Erwan David <erwan@rail.eu.org> wrote:
ça c'est mon historique de développeur embarqué qui parle...
Ca veut juste dire que tu optimises la recursion terminale a la main
en presence de compilateurs deficients...
In article ,
Erwan David wrote:ça c'est mon historique de développeur embarqué qui parle...
Ca veut juste dire que tu optimises la recursion terminale a la main
en presence de compilateurs deficients...
Marc Espie a écrit :In article <4b0e4cc7$0$9187$,
candide wrote:Il y a plein de programmeurs C (C ou autre) qui n'ont jamais rien
compris à la récursivité donc te crois pas obligé de passer par ce
pensum (qui est aussi une belle tarte à la crème).
Si c'est pour donner des conseils aussi mauvais, tu peux aussi fermer
ta gueule.
Visiblement, ça ne te fait pas plaisir que je te dise la réalité mais,
oui, un grand nombre de programmeurs n'ont pas compris la récursivité.
Comprendre la récursivité, ce n'est pas avoir compris la tarte à la
crème de la factorielle.
Une fois de plus, si on dit que l'itération est humaine et la récursion
divine, ce n'est pas pour rien : il y a vraiment une difficulté à
_vraiment_ comprendre la récursivité.Le cote "chercher la petite bete dans la norme", ca tu sais faire.
Le cote "expliquer la programmation aux gens", par contre c'est moins
au point...
Je n'en suis pas si sûr justement. Question d'empathie.Meme s'il y a des gens qui se pretendent programmeurs qui sont nuls, ca
n'est pas une raison pour inciter les nouveaux a faire pareil...
On n'est pas un programmeur nul si on ne maitrise pas la récursivité.
Marc Espie a écrit :
In article <4b0e4cc7$0$9187$426a74cc@news.free.fr>,
candide <candide@free.invalid> wrote:
Il y a plein de programmeurs C (C ou autre) qui n'ont jamais rien
compris à la récursivité donc te crois pas obligé de passer par ce
pensum (qui est aussi une belle tarte à la crème).
Si c'est pour donner des conseils aussi mauvais, tu peux aussi fermer
ta gueule.
Visiblement, ça ne te fait pas plaisir que je te dise la réalité mais,
oui, un grand nombre de programmeurs n'ont pas compris la récursivité.
Comprendre la récursivité, ce n'est pas avoir compris la tarte à la
crème de la factorielle.
Une fois de plus, si on dit que l'itération est humaine et la récursion
divine, ce n'est pas pour rien : il y a vraiment une difficulté à
_vraiment_ comprendre la récursivité.
Le cote "chercher la petite bete dans la norme", ca tu sais faire.
Le cote "expliquer la programmation aux gens", par contre c'est moins
au point...
Je n'en suis pas si sûr justement. Question d'empathie.
Meme s'il y a des gens qui se pretendent programmeurs qui sont nuls, ca
n'est pas une raison pour inciter les nouveaux a faire pareil...
On n'est pas un programmeur nul si on ne maitrise pas la récursivité.
Marc Espie a écrit :In article <4b0e4cc7$0$9187$,
candide wrote:Il y a plein de programmeurs C (C ou autre) qui n'ont jamais rien
compris à la récursivité donc te crois pas obligé de passer par ce
pensum (qui est aussi une belle tarte à la crème).
Si c'est pour donner des conseils aussi mauvais, tu peux aussi fermer
ta gueule.
Visiblement, ça ne te fait pas plaisir que je te dise la réalité mais,
oui, un grand nombre de programmeurs n'ont pas compris la récursivité.
Comprendre la récursivité, ce n'est pas avoir compris la tarte à la
crème de la factorielle.
Une fois de plus, si on dit que l'itération est humaine et la récursion
divine, ce n'est pas pour rien : il y a vraiment une difficulté à
_vraiment_ comprendre la récursivité.Le cote "chercher la petite bete dans la norme", ca tu sais faire.
Le cote "expliquer la programmation aux gens", par contre c'est moins
au point...
Je n'en suis pas si sûr justement. Question d'empathie.Meme s'il y a des gens qui se pretendent programmeurs qui sont nuls, ca
n'est pas une raison pour inciter les nouveaux a faire pareil...
On n'est pas un programmeur nul si on ne maitrise pas la récursivité.
La récursivité est un concept clé de la programmation (et de
l'informatique et des mathématiques en général).
Pour le concept-clef, je veux bien mais souvent ça reste au stade du
concept, quand il s'agit d'implémenter, il y a plus grand monde (sauf
pour une récursivité de type factorielle qui est complètement factice).
On n'a pas toujours besoin de tout verbaliser ni de tout
intellectualiser, tu crois que le singe a pris des cours de récursivité
pour monter dans son arbre ? ;)
La récursivité est un concept clé de la programmation (et de
l'informatique et des mathématiques en général).
Pour le concept-clef, je veux bien mais souvent ça reste au stade du
concept, quand il s'agit d'implémenter, il y a plus grand monde (sauf
pour une récursivité de type factorielle qui est complètement factice).
On n'a pas toujours besoin de tout verbaliser ni de tout
intellectualiser, tu crois que le singe a pris des cours de récursivité
pour monter dans son arbre ? ;)
La récursivité est un concept clé de la programmation (et de
l'informatique et des mathématiques en général).
Pour le concept-clef, je veux bien mais souvent ça reste au stade du
concept, quand il s'agit d'implémenter, il y a plus grand monde (sauf
pour une récursivité de type factorielle qui est complètement factice).
On n'a pas toujours besoin de tout verbaliser ni de tout
intellectualiser, tu crois que le singe a pris des cours de récursivité
pour monter dans son arbre ? ;)
Tu m'emmerdes. Va chercher dans la biblio. J'emploie des termes precis. Tu
peux trouver autant d'exemples que tu veux dans toute la litterature qui
traite de semantique et de preuves de programmes.
... Et des oeilleres persistantes chez toi. C'est pas parce que tu ne
connais QUE C ou assimile qu'il n'existe que ca. C'est pas parce que 90%
des gens programment en procedural pur qu'il n'y a pas autre chose dans
la nature.
Ah ben oui mais faut savoir ce qu'on veut : apprendre à programmer en C
ou se faire un culture G pour discuter devant la machine à café ;)
"Apprendre a programmer en C", ca implique entre autres "d'apprendre a
programmer", ce qui veut dire connaitre toutes les techniques utiles, et ca
inclut la recursion !
M'a echappe ? mais va te faire foutre ! C'est pas parce que tu veux
ecrire les choses autrement en te focalisant sur un detail que ma version
est incorrecte.
Cascade de 3 return, pas tres C ? Euh, la-encore, enleve tes oeilleres.
C'est parfaitement valide, et extremement classique.
Le code plus ou moins standard du pgcd récursif est :
"plus ou moins". c'est juste une autre facon d'ecrire la meme chose.
Tu l'as recopie de quelque part, pour dire que c'est standard ? ou tu arrives
encore a inventer trois lignes de code sans les repiquer ailleurs ?
La j'avoue, la coupe est pleine.
Tu m'emmerdes. Va chercher dans la biblio. J'emploie des termes precis. Tu
peux trouver autant d'exemples que tu veux dans toute la litterature qui
traite de semantique et de preuves de programmes.
... Et des oeilleres persistantes chez toi. C'est pas parce que tu ne
connais QUE C ou assimile qu'il n'existe que ca. C'est pas parce que 90%
des gens programment en procedural pur qu'il n'y a pas autre chose dans
la nature.
Ah ben oui mais faut savoir ce qu'on veut : apprendre à programmer en C
ou se faire un culture G pour discuter devant la machine à café ;)
"Apprendre a programmer en C", ca implique entre autres "d'apprendre a
programmer", ce qui veut dire connaitre toutes les techniques utiles, et ca
inclut la recursion !
M'a echappe ? mais va te faire foutre ! C'est pas parce que tu veux
ecrire les choses autrement en te focalisant sur un detail que ma version
est incorrecte.
Cascade de 3 return, pas tres C ? Euh, la-encore, enleve tes oeilleres.
C'est parfaitement valide, et extremement classique.
Le code plus ou moins standard du pgcd récursif est :
"plus ou moins". c'est juste une autre facon d'ecrire la meme chose.
Tu l'as recopie de quelque part, pour dire que c'est standard ? ou tu arrives
encore a inventer trois lignes de code sans les repiquer ailleurs ?
La j'avoue, la coupe est pleine.
Tu m'emmerdes. Va chercher dans la biblio. J'emploie des termes precis. Tu
peux trouver autant d'exemples que tu veux dans toute la litterature qui
traite de semantique et de preuves de programmes.
... Et des oeilleres persistantes chez toi. C'est pas parce que tu ne
connais QUE C ou assimile qu'il n'existe que ca. C'est pas parce que 90%
des gens programment en procedural pur qu'il n'y a pas autre chose dans
la nature.
Ah ben oui mais faut savoir ce qu'on veut : apprendre à programmer en C
ou se faire un culture G pour discuter devant la machine à café ;)
"Apprendre a programmer en C", ca implique entre autres "d'apprendre a
programmer", ce qui veut dire connaitre toutes les techniques utiles, et ca
inclut la recursion !
M'a echappe ? mais va te faire foutre ! C'est pas parce que tu veux
ecrire les choses autrement en te focalisant sur un detail que ma version
est incorrecte.
Cascade de 3 return, pas tres C ? Euh, la-encore, enleve tes oeilleres.
C'est parfaitement valide, et extremement classique.
Le code plus ou moins standard du pgcd récursif est :
"plus ou moins". c'est juste une autre facon d'ecrire la meme chose.
Tu l'as recopie de quelque part, pour dire que c'est standard ? ou tu arrives
encore a inventer trois lignes de code sans les repiquer ailleurs ?
La j'avoue, la coupe est pleine.
Bin si, justement. Tiens, écrit un éditeur de lien sans utiliser la
récursion, juste pour voir...
Bin si, justement. Tiens, écrit un éditeur de lien sans utiliser la
récursion, juste pour voir...
Bin si, justement. Tiens, écrit un éditeur de lien sans utiliser la
récursion, juste pour voir...
Et tu crois que tout programmeur C a le background pour écrire un
éditeur de liens ? Le programmeur qui écrit un compilateur ou des outils
de ce genre n'est pas le programmeur lambda.
Mais je veux bien examiner un code-source d'éditeur de liens, histoire
de voir si justement la récursivité est aussi utilisée que tu le dis.
T'as un lien vers les sources de ld ou un truc du genre ?
Et tu crois que tout programmeur C a le background pour écrire un
éditeur de liens ? Le programmeur qui écrit un compilateur ou des outils
de ce genre n'est pas le programmeur lambda.
Mais je veux bien examiner un code-source d'éditeur de liens, histoire
de voir si justement la récursivité est aussi utilisée que tu le dis.
T'as un lien vers les sources de ld ou un truc du genre ?
Et tu crois que tout programmeur C a le background pour écrire un
éditeur de liens ? Le programmeur qui écrit un compilateur ou des outils
de ce genre n'est pas le programmeur lambda.
Mais je veux bien examiner un code-source d'éditeur de liens, histoire
de voir si justement la récursivité est aussi utilisée que tu le dis.
T'as un lien vers les sources de ld ou un truc du genre ?