probleme de recursivite - Perl - Programmation
Marsh Posté le 05-06-2004 à 18:33:01
je sais je passe pour une quiche mai je sui en premiere anne de bts iris et je fais du c++ et la mon stage est en perl et je connais pas la recursiviter donc je galere.
merci d'avance de votre reponse ki meclairera je lespere
Marsh Posté le 05-06-2004 à 20:39:05
La recursivité n'a rien a voir avec le langage.
Tourne toi plutot vers des bouquins ou des sites d'algo. Je n'ai pas de sites en tete sur le sujet et je manque de temps pour te trouver ca. Alors cherche un peu par toi meme.
(Repense eventuellement a tes cours de premiere/terminale sur la recursivite des suites).
Marsh Posté le 05-06-2004 à 21:01:25
tiens, trouvé sur google:
http://www.chambily.com/recursivite/
c'est en pascal, mais les principes sont les memes
tiens, un truc en C:
http://perso.wanadoo.fr/carlov/cou [...] ivite.html
Marsh Posté le 07-06-2004 à 08:23:13
merci a vous deux
et pour le 1er site je connaisai mai le 2eme est pas mal du tout
je vais continuer mes tests en esperant de la reussite cette fois.
Marsh Posté le 08-06-2004 à 15:39:04
voila c encor moi jai encor un pti probleme jai ecir une fonction recursive( decidement jai du mal ). il ni a pas derreur mais elle naffiche rien.
Code :
|
si il y a kelkun ki peut me dire ce ki va pas svp
Marsh Posté le 08-06-2004 à 19:21:08
Code :
|
Ceci est la définition de calci_4.
Dans cette fonction, tu fais appel à ... calci_4.
C'est ça la récursivité, c'est quand tu fais appel à la fonction dans sa propre définition. Pour éviter que ça ne boucle et ça ne finisse par exploser (les appels et les calculs intermédiaires étant empilés), il faut une condition d'arrêt qui sera vérifiée à chaque appel ; ici, if($i >= 3), on arrête.
Marsh Posté le 08-06-2004 à 19:46:59
royou1 a écrit : voila c encor moi jai encor un pti probleme jai ecir une fonction recursive( decidement jai du mal ). il ni a pas derreur mais elle naffiche rien. |
Ca fait quelque temps que je n'ai pas fait de perl,
Mais je doute de ta syntaxe sur
Code :
|
Marsh Posté le 08-06-2004 à 21:24:31
Ouaip, moi non plus, ça ne me rappelle rien. Mais avec Perl, faut se méfier de ses souvenirs.
Le & -> bizarre. Et dans la subroutine, j'aurais mis des shift(@_) pour récuperer les arguments.
Marsh Posté le 08-06-2004 à 22:07:01
le & est optionel pour les appels de fonctions, et en fait il n'est plus vraiment souhaitable depuis Perl 5.
Pour les arguments effectivement tu ne les recuperes par dans ton gen_block!
Marsh Posté le 09-06-2004 à 09:21:30
saye jai corrriger en tenant compte de vos remarque et jai ceci maintenant:
Code :
|
;
le petit probleme c ke jai une erreur de hash donc il y a un truc ke je fai pas comme il fo.
en fait moi ce ke je ve c ke cette fonction recursive me retourne un truc de ce style mais avec abcd:
Code :
|
ci dessus ce ke jai obtenue en faisant le test avec des boucles for ou while.et comme sa faisait tro de ligne mon maitre de stage( ) ma di de faire avec la recursivite( ) jai reussi a l'ecrire mais pas a la faire fonctionner( ).
voila je sais jsuis chiant a tou le temps dmd mai je galer avec la recursivité ke je connaisai pas il y a encor 1 semaine
Marsh Posté le 09-06-2004 à 13:45:20
pk ton maitre de stage te demande ca??
ca ressemble plus à un exam qu'autre chose!
en plus en Perl al recursivité c'est loin d'etre efficace! Les boucles c'est bien mieux géré
Marsh Posté le 09-06-2004 à 13:48:59
c parce ke jai fai avec les boucles et le nombre de ligne de code est 4 fois plus important ke si jutilise la recursivite donc il ve sa pour reduire le nombre de ligne de code et pour ke japrene la recursivite.
jai essayer de mentrainer avec des tutos et du delphi pour comprendre la recursivite mais c vraiment chaud.
Marsh Posté le 09-06-2004 à 17:26:17
n'empêche que tu ne récupères toujours pas tes arguments dans la fonction init_vector.
Edit: j'ai rien dit, désolé (oubli des portées de variables)
Marsh Posté le 09-06-2004 à 17:43:35
Je crois que tu as un soucis sur ta condition d'arrêt. Si j'ai bien compris (à voir), ta condition d'arrêt est $i >= $range, soit $range=0 ce qui stopera la récursivité. Or ici tu envoies $range/$element_n pour $range. Au début $range=$vector_n=4**3=64, ensuite $range = 16, puis 4, puis 1, puis 1/4, puis 1/16 etc ... ce qui sera toujours strictement supérieur à 0
Marsh Posté le 09-06-2004 à 20:41:30
ben tu lui dira qu'en Perl la recurcivité c'est pas efficace: ca bouffe un max de memoire et c'est plus lent.
En gros voila l'explication: pour gagner en vitesse Perl garde la memoire alouée pour chaque variable d'une fonction qu'il a deja exectué. Par exemple si dans une fonction tu declare une varibale "my $a" et que tu lui alloue une chaine de 10ko, et ben meme si tu quite ta fonction Perl garde une memoire allouée à 10ko pour $a. Ca lui permet de ne pas réalouer la fois suivante, et donc de gagner en vitesse. Le probleme c'est qu'il est obligé de faire ca pour chaque niveau de recursion dans ta fonction, sans jamais libérer la memoire. Dans ton cas tu n'a pas ce probleme vu que tu utilise des variables globales, mais de toutes facons je ne pense pas queton maitre de stage sera tres content en voyant ca...
Sans compter le fait que les appels de fonction sont tout de meme assez lents en perl...
Marsh Posté le 09-06-2004 à 20:47:11
Tu as des cours de français dans ton stage ?
Sinon tu n'utilises pas le couple
Code :
|
?
Marsh Posté le 10-06-2004 à 08:47:38
hum sa commence a me gonfler cette recursivite( ) de m.... mais bon on me demande sa .
donc pour repondre a toute vos suggestion et vos conseils .
Aparament le probleme est bien sur la condition de sortie, ensuite
Citation : rasthor a dit:Tu as des cours de français dans ton stage ? |
ben jecri a larache pour aller + vite et c labitude desd texto sur le tel.
et pour les fonctions oui jutilise la librairie use strict; mais pas celle use warnings;
bon en bref jsui pas ariver mais jai 2semaine( ) pour essayer car il me reste 2 semaines de stage et jai deja fini le projet alors on ma dmd de loptimiser.
Marsh Posté le 10-06-2004 à 10:58:40
bon saye jai coriger la plupar des choses mais il me reste un bleme sur t :
Code :
|
voila ce ke jobtient et il merde au 2eme tour de boucle:
Code :
|
au lieu de faire des combis de 3 el fait des combis de 5 bizare non et le bleme il vien de sa:
Code :
|
merci de maider svp
Marsh Posté le 14-06-2004 à 08:41:03
e sans dec yen a pas un ki peut me dire ce ki va pas .
Marsh Posté le 14-06-2004 à 20:22:42
ReplyMarsh Posté le 14-06-2004 à 20:24:36
Royou1, tu fais koi de tes journée si 10 jours t'arrive pas à regler ce problème?
Un stage c'est fait pour apprendre, alors apprend
Marsh Posté le 15-06-2004 à 14:29:15
vous inkiete pas le probleme est regler
si yen a ki veule la solution je la posterai.
Marsh Posté le 05-06-2004 à 18:32:18
Voila mon probleme c ke mon maitre de stage ma demande de resoudre un probleme et de me servir de la recursivite.
Je ne sai pas ce ke c donc jai fait des recherches sur google et je n'ai pas trouver ce ke je chercher j'ai juste trouver des fonctions pour essayer de comprendre la chose main en vain.
voila le source a modifier: