je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
import dis
def g(n, a=0):
... if n<1:
g(3)
3
dis.dis(g)
0 SET_LINENO 1
29 POP_TOP
54 LOAD_CONST 0 (None)
57 RETURN_VALUE
PS: Je programme, c'est tout. Je ne connais pas _exactement_ pourquoi la
récursivité terminale permet ceci ou cela. Cela viendra un jour,
peut-etre, mais pour l'instant j'apprends :-)
je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
import dis
def g(n, a=0):
... if n<1:
g(3)
3
dis.dis(g)
0 SET_LINENO 1
29 POP_TOP
54 LOAD_CONST 0 (None)
57 RETURN_VALUE
PS: Je programme, c'est tout. Je ne connais pas _exactement_ pourquoi la
récursivité terminale permet ceci ou cela. Cela viendra un jour,
peut-etre, mais pour l'instant j'apprends :-)
je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
import dis
def g(n, a=0):
... if n<1:
g(3)
3
dis.dis(g)
0 SET_LINENO 1
29 POP_TOP
54 LOAD_CONST 0 (None)
57 RETURN_VALUE
PS: Je programme, c'est tout. Je ne connais pas _exactement_ pourquoi la
récursivité terminale permet ceci ou cela. Cela viendra un jour,
peut-etre, mais pour l'instant j'apprends :-)
function factorielle(n: integer) return integer
if n = 0
return 1;
else
return n*factorielle(n-1);
end if
end factorielle
serait bien meilleur.
function factorielle(n: integer) return integer
if n = 0
return 1;
else
return n*factorielle(n-1);
end if
end factorielle
serait bien meilleur.
function factorielle(n: integer) return integer
if n = 0
return 1;
else
return n*factorielle(n-1);
end if
end factorielle
serait bien meilleur.
[ Attention: Xpost + follow-up ]
Bonjour,
A la Fac, on nous enseigne des langages, mais pas Python.
Sur certains de ces langages (Ocaml, mais c'est pas pour troller)
faire un
truc "récursif terminal" permet de faire de la récursivité "très
profonde", en repoussant les limites du stack overflow.
J'aime bien ce "truc", moi. La récursivité ça m'a impressionné :-).
Le problème:
Au niveau professionel, OCaml n'est pas très implanté, et d'ailleurs je
suis plutot dans une boite où c'est Python qui règne en maître. Ce
n'est pas un mal, mais je recherche des exemples à difficulté
progressive de cas de recursivité terminale, et je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
Auriez-vous des pistes?
PS: Je programme, c'est tout. Je ne connais pas _exactement_ pourquoi la
récursivité terminale permet ceci ou cela. Cela viendra un jour,
peut-etre, mais pour l'instant j'apprends :-)
[ Attention: Xpost + follow-up ]
Bonjour,
A la Fac, on nous enseigne des langages, mais pas Python.
Sur certains de ces langages (Ocaml, mais c'est pas pour troller)
faire un
truc "récursif terminal" permet de faire de la récursivité "très
profonde", en repoussant les limites du stack overflow.
J'aime bien ce "truc", moi. La récursivité ça m'a impressionné :-).
Le problème:
Au niveau professionel, OCaml n'est pas très implanté, et d'ailleurs je
suis plutot dans une boite où c'est Python qui règne en maître. Ce
n'est pas un mal, mais je recherche des exemples à difficulté
progressive de cas de recursivité terminale, et je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
Auriez-vous des pistes?
PS: Je programme, c'est tout. Je ne connais pas _exactement_ pourquoi la
récursivité terminale permet ceci ou cela. Cela viendra un jour,
peut-etre, mais pour l'instant j'apprends :-)
[ Attention: Xpost + follow-up ]
Bonjour,
A la Fac, on nous enseigne des langages, mais pas Python.
Sur certains de ces langages (Ocaml, mais c'est pas pour troller)
faire un
truc "récursif terminal" permet de faire de la récursivité "très
profonde", en repoussant les limites du stack overflow.
J'aime bien ce "truc", moi. La récursivité ça m'a impressionné :-).
Le problème:
Au niveau professionel, OCaml n'est pas très implanté, et d'ailleurs je
suis plutot dans une boite où c'est Python qui règne en maître. Ce
n'est pas un mal, mais je recherche des exemples à difficulté
progressive de cas de recursivité terminale, et je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
Auriez-vous des pistes?
PS: Je programme, c'est tout. Je ne connais pas _exactement_ pourquoi la
récursivité terminale permet ceci ou cela. Cela viendra un jour,
peut-etre, mais pour l'instant j'apprends :-)
et je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
Auriez-vous des pistes?
PS: Je programme, c'est tout. Je ne connais pas _exactement_ pourquoi la
récursivité terminale permet ceci ou cela. Cela viendra un jour,
peut-etre, mais pour l'instant j'apprends :-)
et je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
Auriez-vous des pistes?
PS: Je programme, c'est tout. Je ne connais pas _exactement_ pourquoi la
récursivité terminale permet ceci ou cela. Cela viendra un jour,
peut-etre, mais pour l'instant j'apprends :-)
et je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
Auriez-vous des pistes?
PS: Je programme, c'est tout. Je ne connais pas _exactement_ pourquoi la
récursivité terminale permet ceci ou cela. Cela viendra un jour,
peut-etre, mais pour l'instant j'apprends :-)
[ Attention: Xpost + follow-up ]
Bonjour,
A la Fac, on nous enseigne des langages, mais pas Python.
Sur certains de ces langages (Ocaml, mais c'est pas pour troller) faire un
truc "récursif terminal" permet de faire de la récursivité "très
profonde", en repoussant les limites du stack overflow.
J'aime bien ce "truc", moi. La récursivité ça m'a impressionné :-).
Le problème:
Au niveau professionel, OCaml n'est pas très implanté, et d'ailleurs je
suis plutot dans une boite où c'est Python qui règne en maître.
Ce
n'est pas un mal, mais je recherche des exemples à difficulté
progressive de cas de recursivité terminale, et je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
Auriez-vous des pistes?
PS: Je programme, c'est tout. Je ne connais pas _exactement_ pourquoi la
récursivité terminale permet ceci ou cela. Cela viendra un jour,
peut-etre, mais pour l'instant j'apprends :-)
[ Attention: Xpost + follow-up ]
Bonjour,
A la Fac, on nous enseigne des langages, mais pas Python.
Sur certains de ces langages (Ocaml, mais c'est pas pour troller) faire un
truc "récursif terminal" permet de faire de la récursivité "très
profonde", en repoussant les limites du stack overflow.
J'aime bien ce "truc", moi. La récursivité ça m'a impressionné :-).
Le problème:
Au niveau professionel, OCaml n'est pas très implanté, et d'ailleurs je
suis plutot dans une boite où c'est Python qui règne en maître.
Ce
n'est pas un mal, mais je recherche des exemples à difficulté
progressive de cas de recursivité terminale, et je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
Auriez-vous des pistes?
PS: Je programme, c'est tout. Je ne connais pas _exactement_ pourquoi la
récursivité terminale permet ceci ou cela. Cela viendra un jour,
peut-etre, mais pour l'instant j'apprends :-)
[ Attention: Xpost + follow-up ]
Bonjour,
A la Fac, on nous enseigne des langages, mais pas Python.
Sur certains de ces langages (Ocaml, mais c'est pas pour troller) faire un
truc "récursif terminal" permet de faire de la récursivité "très
profonde", en repoussant les limites du stack overflow.
J'aime bien ce "truc", moi. La récursivité ça m'a impressionné :-).
Le problème:
Au niveau professionel, OCaml n'est pas très implanté, et d'ailleurs je
suis plutot dans une boite où c'est Python qui règne en maître.
Ce
n'est pas un mal, mais je recherche des exemples à difficulté
progressive de cas de recursivité terminale, et je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
Auriez-vous des pistes?
PS: Je programme, c'est tout. Je ne connais pas _exactement_ pourquoi la
récursivité terminale permet ceci ou cela. Cela viendra un jour,
peut-etre, mais pour l'instant j'apprends :-)
Un version récursive terminale de la fonction factorielle (je ne connais
pas du tout python, je risque une erreur de syntaxe):
function factorielle_aux (acc: integer, n: interger) return integer
if n = 0
return acc;
else
return factorielle_aux (n*acc, n-1);
end if
end factorielle_aux
function factorielle (n : integer) return integer
return facotirelle_aux (1, n);
end factorielle
Comme souvent pour rendre une fonction terminale récursive il faut
rajouter un paramètre.
Un version récursive terminale de la fonction factorielle (je ne connais
pas du tout python, je risque une erreur de syntaxe):
function factorielle_aux (acc: integer, n: interger) return integer
if n = 0
return acc;
else
return factorielle_aux (n*acc, n-1);
end if
end factorielle_aux
function factorielle (n : integer) return integer
return facotirelle_aux (1, n);
end factorielle
Comme souvent pour rendre une fonction terminale récursive il faut
rajouter un paramètre.
Un version récursive terminale de la fonction factorielle (je ne connais
pas du tout python, je risque une erreur de syntaxe):
function factorielle_aux (acc: integer, n: interger) return integer
if n = 0
return acc;
else
return factorielle_aux (n*acc, n-1);
end if
end factorielle_aux
function factorielle (n : integer) return integer
return facotirelle_aux (1, n);
end factorielle
Comme souvent pour rendre une fonction terminale récursive il faut
rajouter un paramètre.
Auriez-vous des pistes?
Des exemples d'utilisation de la récursivité ?
Auriez-vous des pistes?
Des exemples d'utilisation de la récursivité ?
Auriez-vous des pistes?
Des exemples d'utilisation de la récursivité ?
A la Fac, on nous enseigne des langages, mais pas Python.
Sur certains de ces langages (Ocaml, mais c'est pas pour troller) faire un
truc "récursif terminal" permet de faire de la récursivité "très
profonde", en repoussant les limites du stack overflow.
J'aime bien ce "truc", moi. La récursivité ça m'a impressionné :-).
Le problème:
Au niveau professionel, OCaml n'est pas très implanté, et d'ailleurs je
suis plutot dans une boite où c'est Python qui règne en maître. Ce
n'est pas un mal, mais je recherche des exemples à difficulté
progressive de cas de recursivité terminale, et je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
A la Fac, on nous enseigne des langages, mais pas Python.
Sur certains de ces langages (Ocaml, mais c'est pas pour troller) faire un
truc "récursif terminal" permet de faire de la récursivité "très
profonde", en repoussant les limites du stack overflow.
J'aime bien ce "truc", moi. La récursivité ça m'a impressionné :-).
Le problème:
Au niveau professionel, OCaml n'est pas très implanté, et d'ailleurs je
suis plutot dans une boite où c'est Python qui règne en maître. Ce
n'est pas un mal, mais je recherche des exemples à difficulté
progressive de cas de recursivité terminale, et je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
A la Fac, on nous enseigne des langages, mais pas Python.
Sur certains de ces langages (Ocaml, mais c'est pas pour troller) faire un
truc "récursif terminal" permet de faire de la récursivité "très
profonde", en repoussant les limites du stack overflow.
J'aime bien ce "truc", moi. La récursivité ça m'a impressionné :-).
Le problème:
Au niveau professionel, OCaml n'est pas très implanté, et d'ailleurs je
suis plutot dans une boite où c'est Python qui règne en maître. Ce
n'est pas un mal, mais je recherche des exemples à difficulté
progressive de cas de recursivité terminale, et je cherche à savoir si
faire de la récursivité terminale sous Python procure (presque) les
mêmes avantages.
On Mon, 29 Aug 2005 23:06:20 +0200, Bruno Desthuilliers wrote:Auriez-vous des pistes?
Des exemples d'utilisation de la récursivité ?
En fait, c'est pas ça, mais dans un fil de ce groupe j'avais posté un
truc sur la suppression des commentaires dans un fichier texte.
Pour le fun, mais vraiment pour le fun, j'avais fait ça en fonctionnel et
recursif.
Sur 5 ou 10 lignes le test est passé (la machine à 1Go de RAM et un peu
plus en swap). Sur un fichier réel (celui sample de awstats de quelques
centaines de lignes) j'ai dépassé la profondeur de récursion
autorisée. Le fichier en lui même est relativement léger par rapport à
la RAM disponible. J'y vois un problème.
L'agorithme a été simplement de stocker tout le fichier dans une liste,
puis ensuite de travailler (recursivement) sur cette liste en générant
une liste des lignes qui ne sont pas des commentaires.
D'ailleurs je balance le code qui l'a fait:
################################################
import sys, string, os
fichierEntree=open(sys.argv[1],"r")
nomFichier=(os.getcwd() + "/tmp.txt")
fichierSortie=open(nomFichier,"w")
linesList=fichierEntree.readlines()
def cleanList (inputList,outputList=[]):
try:
if (inputList[0][0]=='#') or (inputList[0][0]=='n'):
Et si le commentaire n'est pas au début de la ligne ?-)
cleanList(inputList[1:],outputList)
else:
line=inputList[0]
outputList= outputList + line
cleanList(inputList[1:], outputList)
except IndexError:
return outputList
def listToFile (aList,outputFileName):
opf=open(outputFileName)
try:
opf.writelines(aList[0])
listToFile(aList[1:])
except IndexError:
opf.writelines('n')
opf.close()
Bon j'avoue que c'est énormément de lignes pour presque rien,
mais
j'essayais de faire de la "recursivité terminale" (Ai-je réussi?
Normalement oui)...
On Mon, 29 Aug 2005 23:06:20 +0200, Bruno Desthuilliers wrote:
Auriez-vous des pistes?
Des exemples d'utilisation de la récursivité ?
En fait, c'est pas ça, mais dans un fil de ce groupe j'avais posté un
truc sur la suppression des commentaires dans un fichier texte.
Pour le fun, mais vraiment pour le fun, j'avais fait ça en fonctionnel et
recursif.
Sur 5 ou 10 lignes le test est passé (la machine à 1Go de RAM et un peu
plus en swap). Sur un fichier réel (celui sample de awstats de quelques
centaines de lignes) j'ai dépassé la profondeur de récursion
autorisée. Le fichier en lui même est relativement léger par rapport à
la RAM disponible. J'y vois un problème.
L'agorithme a été simplement de stocker tout le fichier dans une liste,
puis ensuite de travailler (recursivement) sur cette liste en générant
une liste des lignes qui ne sont pas des commentaires.
D'ailleurs je balance le code qui l'a fait:
################################################
import sys, string, os
fichierEntree=open(sys.argv[1],"r")
nomFichier=(os.getcwd() + "/tmp.txt")
fichierSortie=open(nomFichier,"w")
linesList=fichierEntree.readlines()
def cleanList (inputList,outputList=[]):
try:
if (inputList[0][0]=='#') or (inputList[0][0]=='n'):
Et si le commentaire n'est pas au début de la ligne ?-)
cleanList(inputList[1:],outputList)
else:
line=inputList[0]
outputList= outputList + line
cleanList(inputList[1:], outputList)
except IndexError:
return outputList
def listToFile (aList,outputFileName):
opf=open(outputFileName)
try:
opf.writelines(aList[0])
listToFile(aList[1:])
except IndexError:
opf.writelines('n')
opf.close()
Bon j'avoue que c'est énormément de lignes pour presque rien,
mais
j'essayais de faire de la "recursivité terminale" (Ai-je réussi?
Normalement oui)...
On Mon, 29 Aug 2005 23:06:20 +0200, Bruno Desthuilliers wrote:Auriez-vous des pistes?
Des exemples d'utilisation de la récursivité ?
En fait, c'est pas ça, mais dans un fil de ce groupe j'avais posté un
truc sur la suppression des commentaires dans un fichier texte.
Pour le fun, mais vraiment pour le fun, j'avais fait ça en fonctionnel et
recursif.
Sur 5 ou 10 lignes le test est passé (la machine à 1Go de RAM et un peu
plus en swap). Sur un fichier réel (celui sample de awstats de quelques
centaines de lignes) j'ai dépassé la profondeur de récursion
autorisée. Le fichier en lui même est relativement léger par rapport à
la RAM disponible. J'y vois un problème.
L'agorithme a été simplement de stocker tout le fichier dans une liste,
puis ensuite de travailler (recursivement) sur cette liste en générant
une liste des lignes qui ne sont pas des commentaires.
D'ailleurs je balance le code qui l'a fait:
################################################
import sys, string, os
fichierEntree=open(sys.argv[1],"r")
nomFichier=(os.getcwd() + "/tmp.txt")
fichierSortie=open(nomFichier,"w")
linesList=fichierEntree.readlines()
def cleanList (inputList,outputList=[]):
try:
if (inputList[0][0]=='#') or (inputList[0][0]=='n'):
Et si le commentaire n'est pas au début de la ligne ?-)
cleanList(inputList[1:],outputList)
else:
line=inputList[0]
outputList= outputList + line
cleanList(inputList[1:], outputList)
except IndexError:
return outputList
def listToFile (aList,outputFileName):
opf=open(outputFileName)
try:
opf.writelines(aList[0])
listToFile(aList[1:])
except IndexError:
opf.writelines('n')
opf.close()
Bon j'avoue que c'est énormément de lignes pour presque rien,
mais
j'essayais de faire de la "recursivité terminale" (Ai-je réussi?
Normalement oui)...