Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1066 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  probleme de recursivite

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de recursivite

n°753368
royou1
bordeaux dans le coeur
Posté le 05-06-2004 à 18:32:18  profilanswer
 

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:  
 

Code :
  1. #boucle de changement de 4 par 4
  2. $i = 0;
  3. $index = 0;
  4. $j = 0;
  5. while ($index < $vector_n)
  6. { $vector[$index] .= $seq[$j];
  7. }
  8. continue
  9. { $index = $index+1;
  10. ## essayer de transformer en f(i)
  11.   $i = $i + 1;
  12.   $j = int($i/$seq_n);
  13.   if ($j == $seq_n) { $i = 0; $j = 0;}
  14. }
  15. il faut que le j disparaise et kil ni ai plus que le i
  16. j'ai essayer cela mais sa marche po :
  17. continue
  18. { $index = $index+1;
  19.   $i = &calci_4($index , $seq_n , $i); 
  20. }
  21. ########################################################################
  22. #                                                                    #
  23. #              1.00    0206504  nico                                 #
  24. #                    #
  25. # calci_4($index , $seq_n , $i)             #
  26. #                    #
  27. #it is a procedure in order to reduce the row of the code and this procedure  #
  28. #is use in the boucle while to calculate the number of combinaison    #
  29. #################################################################################
  30. sub calci_4(i){
  31. my $index = 0;
  32. my $i = 0;
  33. if ($i<3)
  34.   $i = int($index/$seq_n);
  35.   calci_4( $i + 1);
  36.   if ($i == $seq_n) { $i = 0; } 
  37. }
  38.   return($i);
  39. }

mood
Publicité
Posté le 05-06-2004 à 18:32:18  profilanswer
 

n°753371
royou1
bordeaux dans le coeur
Posté le 05-06-2004 à 18:33:01  profilanswer
 

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

n°753476
thermoclin​e
Geek intelligent
Posté le 05-06-2004 à 20:39:05  profilanswer
 

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).

n°753512
pospos
Posté le 05-06-2004 à 21:01:25  profilanswer
 

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

n°754324
royou1
bordeaux dans le coeur
Posté le 07-06-2004 à 08:23:13  profilanswer
 

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.

n°756651
royou1
bordeaux dans le coeur
Posté le 08-06-2004 à 15:39:04  profilanswer
 

voila c encor moi jai encor un pti probleme jai ecir une fonction recursive( decidement jai du mal  :cry: ).  il ni a pas derreur mais elle naffiche rien.

Code :
  1. #
  2. # shared data
  3. #
  4. my $seq_n = 4;
  5. my @vector;
  6. my @element={"A","B","C","D"};
  7. my $element_n = 4;
  8. my $combi_n = 3;
  9. my $vector_n = $element_n^($combi_n);
  10. #================================================================================
  11. # SUBROUTINES
  12. #================================================================================
  13. #################################################################################
  14. # 1.00 080604 nico #
  15. # init_vector #
  16. #it consist to initialise the vector about blank #
  17. #################################################################################
  18. sub init_vector{
  19. my $i = 0;
  20. $vector_n = $seq_n * $seq_n;
  21. for ($i=0; $i<$vector_n; $i++)
  22. { push (@vector, $blank);
  23. }
  24. }
  25. #################################################################################
  26. # 1.00 080604 nico #
  27. # gen_block #
  28. #it consist to use recursivite in the project #
  29. #################################################################################
  30. sub gen_block{
  31. my $range = 0;
  32. my $offset = 0;
  33. my $block_size = $range/$element_n;
  34. my $i = 0;
  35. my $j = 0;
  36. my $k = 0;
  37. my $t = 0;
  38. while ($i<$range){
  39. $vector[$offset+$i].=$element[$k];
  40. $j= $j+1;
  41. if ($j == $block_size){
  42. $j = 0;
  43. $k = $k+1;
  44. $t = $t +$range;
  45. print "$i","$j","$k","$t" ;
  46. }
  47. gen_block($block_size,$t);
  48. }
  49. continue{
  50. $i = $i+1;
  51. }
  52. }
  53. #================================================================================
  54. # MAIN
  55. #================================================================================
  56. &init_vector($vector_n);
  57. print &gen_block($vector_n,0);
  58. exit 0;


si il y a kelkun ki peut me dire ce ki va pas svp :D  
 

n°757000
el muchach​o
Comfortably Numb
Posté le 08-06-2004 à 19:21:08  profilanswer
 

Code :
  1. sub calci_4(i){ 
  2.      my $index = 0; 
  3.      my $i = 0; 
  4.      if ($i<3) 
  5.      { 
  6.         $i = int($index/$seq_n); 
  7.         calci_4( $i + 1); 
  8.         if ($i == $seq_n) { $i = 0; } 
  9.      } 
  10.       return($i); 
  11.   }


 
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.

n°757013
thermoclin​e
Geek intelligent
Posté le 08-06-2004 à 19:46:59  profilanswer
 

royou1 a écrit :

voila c encor moi jai encor un pti probleme jai ecir une fonction recursive( decidement jai du mal  :cry: ).  il ni a pas derreur mais elle naffiche rien.
 
si il y a kelkun ki peut me dire ce ki va pas svp :D


 
Ca fait quelque temps que je n'ai pas fait de perl,
 
Mais je doute de ta syntaxe sur
 

Code :
  1. print &gen_block($vector_n,0);


---------------
Les bureaucrates: "S'ils tombaient d'un immeuble, il leur faudrait une semaine pour s'ecraser." "All I ever wanted All I ever needed Is here in my arms Words are very unnecessary They can only do harm               Enjoy the silence"
n°757147
el muchach​o
Comfortably Numb
Posté le 08-06-2004 à 21:24:31  profilanswer
 

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.

n°757219
pospos
Posté le 08-06-2004 à 22:07:01  profilanswer
 

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!


Message édité par pospos le 14-06-2004 à 20:25:26
mood
Publicité
Posté le 08-06-2004 à 22:07:01  profilanswer
 

n°757462
royou1
bordeaux dans le coeur
Posté le 09-06-2004 à 09:21:30  profilanswer
 

saye jai corrriger en tenant compte de vos remarque et jai ceci maintenant:

Code :
  1. my $seq_n = 4;
  2. my @vector;
  3. my @element={"A","B","C","D"};
  4. my $element_n = 4;
  5. my $combi_n = 3;
  6. my $vector_n = $element_n**$combi_n;
  7. #================================================================================
  8. # SUBROUTINES
  9. #================================================================================
  10. #################################################################################
  11. #              1.00 080604 nico #
  12. # init_vector                 #
  13. #it consist to initialise the vector about blank        #
  14. #################################################################################
  15. sub init_vector{
  16. my $i = 0;
  17. for ($i=0; $i<$vector_n; $i++)
  18. { push (@vector, $blank);
  19. }
  20. }
  21. #################################################################################
  22. #              1.00 080604 nico #
  23. # gen_block ( $range , $offset )            #
  24. #it consist to use recursivite in the project         #
  25. #################################################################################
  26. sub gen_block
  27. {
  28. my ( $range , $offset ) = @_;
  29. my $block_size = $range/$element_n;
  30. my $i = 0;
  31. my $j = 0;
  32. my $k = 0;
  33. my $t = 0;
  34. my $str = "";
  35.  while ($i<$range){
  36.   $vector[$offset+$i].=$element[$k];
  37.   $str = $vector[$offset+$i];
  38.   $j= $j+1;
  39.    if ($j == $block_size){
  40.     $j = 0;
  41.     $k = $k+1;
  42.     $t = $t + $range;
  43.     print str_vec2str("\n",@vector);
  44.    }
  45.   gen_block($block_size,$t);
  46.  }
  47.  continue{
  48.   $i = $i+1;
  49.  }
  50. }
  51. #================================================================================
  52. # MAIN
  53. #================================================================================
  54. my @aa;
  55. &init_vector($vector_n);
  56. @aa = &gen_block($vector_n,0);
  57. print str_vec2str("\n",@vector);
  58. print @aa;
  59. exit 0

;
 
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 :
  1. CAPV
  2. AAPV
  3. PAPV
  4. VAPV
  5. CAPV
  6. AAPV
  7. PAPV
  8. VAPV
  9. CAPV
  10. AAPV
  11. PAPV
  12. VAPV
  13. CAVV
  14. AAVV
  15. PAVV
  16. VAVV
  17. CAVV
  18. AAVV
  19. PAVV
  20. VAVV
  21. CAVV
  22. AAVV
  23. PAVV
  24. VAVV
  25. CAVV
  26. AAVV
  27. PAVV
  28. VAVV


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( :kaola: ) ma di de faire avec la recursivite( :cry: ) jai reussi a l'ecrire mais pas a la faire fonctionner( :fou: ).
voila je sais jsuis chiant :D  a tou le temps dmd mai je galer avec la recursivité :cry:  ke je connaisai pas il y a encor 1 semaine

n°757783
pospos
Posté le 09-06-2004 à 13:45:20  profilanswer
 

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é

n°757789
royou1
bordeaux dans le coeur
Posté le 09-06-2004 à 13:48:59  profilanswer
 

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.

n°758252
Tentacle
Posté le 09-06-2004 à 17:26:17  profilanswer
 

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é  :sweat: (oubli des portées de variables)


Message édité par Tentacle le 09-06-2004 à 17:29:10
n°758288
Tentacle
Posté le 09-06-2004 à 17:43:35  profilanswer
 

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 :/

n°758402
pospos
Posté le 09-06-2004 à 20:41:30  profilanswer
 

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...

n°758404
Rasthor
Posté le 09-06-2004 à 20:47:11  profilanswer
 

Tu as des cours de français dans ton stage ? :whistle:
 
 
Sinon tu n'utilises pas le couple  

Code :
  1. use strict;
  2. use warnings;

?

n°758729
royou1
bordeaux dans le coeur
Posté le 10-06-2004 à 08:47:38  profilanswer
 

:heink: hum sa commence a me gonfler cette recursivite( :cry: ) de m.... mais bon on me demande sa :fou: .
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 ? :whistle:

 
 :D 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( :pt1cable: ) pour essayer car il me reste 2 semaines de stage et jai deja fini le projet alors on ma dmd de loptimiser.
 

n°758924
royou1
bordeaux dans le coeur
Posté le 10-06-2004 à 10:58:40  profilanswer
 

bon saye jai coriger la plupar des choses mais il me reste un bleme sur t :

Code :
  1. sub gen_block
  2. {
  3. my ( $range , $offset ) = @_;
  4. my $block_size = $range/$element_n;
  5. my $i = 0;
  6. my $j = 0;
  7. my $k = 0;
  8. my $t = 0;
  9. print "------------------------------------------------------------------------------\n";
  10. while (($i<$range) && ($block_size>=1) && ($offset<=($vector_n-$range)))
  11. { $vector[$offset+$i] .= $element[$k];
  12.  print "$range\t$block_size\t$offset\t$i\t$j\t$k\t$t\t".$element[$k]."\t".$vector[$offset+$i]."\n";
  13.  $j++;
  14.  if ($j == $block_size)
  15.  { $k++;
  16.   $j = 0;
  17.   $t = $block_size*($k-1);
  18.   &gen_block($block_size,$t);
  19.  }
  20. }
  21. continue
  22. { $i++;
  23. }
  24. }


voila ce ke jobtient et il merde au 2eme tour de boucle:

Code :
  1. range   bsize   offset  i       j       k       t       el[k]   vec[offset+i]
  2. ------------------------------------------------------------------------------
  3. 27      9       0       0       0       0       0       A       -A
  4. 27      9       0       1       1       0       0       A       -A
  5. 27      9       0       2       2       0       0       A       -A
  6. 27      9       0       3       3       0       0       A       -A
  7. 27      9       0       4       4       0       0       A       -A
  8. 27      9       0       5       5       0       0       A       -A
  9. 27      9       0       6       6       0       0       A       -A
  10. 27      9       0       7       7       0       0       A       -A
  11. 27      9       0       8       8       0       0       A       -A
  12. ------------------------------------------------------------------------------
  13. 9       3       0       0       0       0       0       A       -AA
  14. 9       3       0       1       1       0       0       A       -AA
  15. 9       3       0       2       2       0       0       A       -AA
  16. ------------------------------------------------------------------------------
  17. 3       1       0       0       0       0       0       A       -AAA
  18. ------------------------------------------------------------------------------
  19. 3       1       0       1       0       1       0       B       -AAB
  20. ------------------------------------------------------------------------------
  21. 3       1       0       2       0       2       1       C       -AAC
  22. ------------------------------------------------------------------------------
  23. 9       3       0       3       0       1       0       B       -AB
  24. 9       3       0       4       1       1       0       B       -AB
  25. 9       3       0       5       2       1       0       B       -AB
  26. ------------------------------------------------------------------------------
  27. 3       1       3       0       0       0       0       A       -ABA
  28. ------------------------------------------------------------------------------
  29. 3       1       3       1       0       1       0       B       -ABB
  30. ------------------------------------------------------------------------------
  31. 3       1       3       2       0       2       1       C       -ABC
  32. ------------------------------------------------------------------------------
  33. 9       3       0       6       0       2       3       C       -AC
  34. 9       3       0       7       1       2       3       C       -AC
  35. 9       3       0       8       2       2       3       C       -AC
  36. ------------------------------------------------------------------------------
  37. 3       1       6       0       0       0       0       A       -ACA
  38. ------------------------------------------------------------------------------
  39. 3       1       6       1       0       1       0       B       -ACB
  40. ------------------------------------------------------------------------------
  41. 3       1       6       2       0       2       1       C       -ACC
  42. ------------------------------------------------------------------------------
  43. 27      9       0       9       0       1       0       B       -B
  44. 27      9       0       10      1       1       0       B       -B
  45. 27      9       0       11      2       1       0       B       -B
  46. 27      9       0       12      3       1       0       B       -B
  47. 27      9       0       13      4       1       0       B       -B
  48. 27      9       0       14      5       1       0       B       -B
  49. 27      9       0       15      6       1       0       B       -B
  50. 27      9       0       16      7       1       0       B       -B
  51. 27      9       0       17      8       1       0       B       -B
  52. ------------------------------------------------------------------------------
  53. 9       3       9       0       0       0       0       A       -BA
  54. 9       3       9       1       1       0       0       A       -BA
  55. 9       3       9       2       2       0       0       A       -BA
  56. ------------------------------------------------------------------------------
  57. 3       1       0       0       0       0       0       A       -AAAA
  58. ------------------------------------------------------------------------------
  59. 3       1       0       1       0       1       0       B       -AABB
  60. ------------------------------------------------------------------------------
  61. 3       1       0       2       0       2       1       C       -AACC
  62. ------------------------------------------------------------------------------
  63. 9       3       9       3       0       1       0       B       -BB
  64. 9       3       9       4       1       1       0       B       -BB
  65. 9       3       9       5       2       1       0       B       -BB
  66. ------------------------------------------------------------------------------
  67. 3       1       3       0       0       0       0       A       -ABAA
  68. ------------------------------------------------------------------------------
  69. 3       1       3       1       0       1       0       B       -ABBB
  70. ------------------------------------------------------------------------------
  71. 3       1       3       2       0       2       1       C       -ABCC
  72. ------------------------------------------------------------------------------
  73. 9       3       9       6       0       2       3       C       -BC
  74. 9       3       9       7       1       2       3       C       -BC
  75. 9       3       9       8       2       2       3       C       -BC
  76. ------------------------------------------------------------------------------
  77. 3       1       6       0       0       0       0       A       -ACAA
  78. ------------------------------------------------------------------------------
  79. 3       1       6       1       0       1       0       B       -ACBB
  80. ------------------------------------------------------------------------------
  81. 3       1       6       2       0       2       1       C       -ACCC
  82. ------------------------------------------------------------------------------
  83. 27      9       0       18      0       2       9       C       -C
  84. 27      9       0       19      1       2       9       C       -C
  85. 27      9       0       20      2       2       9       C       -C
  86. 27      9       0       21      3       2       9       C       -C
  87. 27      9       0       22      4       2       9       C       -C
  88. 27      9       0       23      5       2       9       C       -C
  89. 27      9       0       24      6       2       9       C       -C
  90. 27      9       0       25      7       2       9       C       -C
  91. 27      9       0       26      8       2       9       C       -C
  92. ------------------------------------------------------------------------------
  93. 9       3       18      0       0       0       0       A       -CA
  94. 9       3       18      1       1       0       0       A       -CA
  95. 9       3       18      2       2       0       0       A       -CA
  96. ------------------------------------------------------------------------------
  97. 3       1       0       0       0       0       0       A       -AAAAA
  98. ------------------------------------------------------------------------------
  99. 3       1       0       1       0       1       0       B       -AABBB
  100. ------------------------------------------------------------------------------
  101. 3       1       0       2       0       2       1       C       -AACCC
  102. ------------------------------------------------------------------------------
  103. 9       3       18      3       0       1       0       B       -CB
  104. 9       3       18      4       1       1       0       B       -CB
  105. 9       3       18      5       2       1       0       B       -CB
  106. ------------------------------------------------------------------------------
  107. 3       1       3       0       0       0       0       A       -ABAAA
  108. ------------------------------------------------------------------------------
  109. 3       1       3       1       0       1       0       B       -ABBBB
  110. ------------------------------------------------------------------------------
  111. 3       1       3       2       0       2       1       C       -ABCCC
  112. ------------------------------------------------------------------------------
  113. 9       3       18      6       0       2       3       C       -CC
  114. 9       3       18      7       1       2       3       C       -CC
  115. 9       3       18      8       2       2       3       C       -CC
  116. ------------------------------------------------------------------------------
  117. 3       1       6       0       0       0       0       A       -ACAAA
  118. ------------------------------------------------------------------------------
  119. 3       1       6       1       0       1       0       B       -ACBBB
  120. ------------------------------------------------------------------------------
  121. 3       1       6       2       0       2       1       C       -ACCCC
  122. ------------------------------------------------------------------------------


au lieu de faire des combis de 3 el fait des combis de 5 bizare non et le bleme il vien de sa:

Code :
  1. $t = $block_size*($k-1);


 :ange: merci de maider svp

n°762404
royou1
bordeaux dans le coeur
Posté le 14-06-2004 à 08:41:03  profilanswer
 

e sans dec yen a pas un ki peut me dire ce ki va pas .


---------------
bordeaux:nos chants et notre amour n' ont pas de frontiere car notre maillot au scapulaire est un maillot legendaire.
n°763326
Rasthor
Posté le 14-06-2004 à 20:22:42  profilanswer
 

royou1 a écrit :

e sans dec yen a pas un ki peut me dire ce ki va pas .

Ton français :o

n°763331
pospos
Posté le 14-06-2004 à 20:24:36  profilanswer
 

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

n°764400
royou1
bordeaux dans le coeur
Posté le 15-06-2004 à 14:29:15  profilanswer
 

vous inkiete pas le probleme est regler  
si yen a ki veule la solution je la posterai. :D


---------------
bordeaux:nos chants et notre amour n' ont pas de frontiere car notre maillot au scapulaire est un maillot legendaire.
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  probleme de recursivite

 

Sujets relatifs
ASP.NET - Probleme dans l'envoi de email!Probleme avec le .profile (sous Suse linux)
probleme de reaffichage dans un shell deja ouvert[SWT][JFreeReport]Problème d'affichage de l'entete ???????
Probleme mise en page html a cause de photosProblème avec une variable !!
[css] problème de position de menuProblème xpath : compter le nombre de noeud ?
Probleme de session lors des redirectionspetit probleme de recursivité
Plus de sujets relatifs à : probleme de recursivite


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR