Recursivité >> Problème important... - PHP - Programmation
Marsh Posté le 03-07-2005 à 19:10:02
[cite]
// Cette fonction récursive est censée prendre un texte en paramettre, et supprimer toutes les occurences du mot "caca". Elle doit donc renvoyer un texte sans aucun mot "caca".
[/cite]
Ce n'est pas le genre de probleme a apprehender avec de la recursivite ... il y a des problemes qui se pretent tout a fait a la recursivite ... pas cuila !
Marsh Posté le 03-07-2005 à 19:15:19
Mais ce n'est pas vraiment la question... Pour ma fonction modifiée, à part le type des variables, je ne vois pas de différence avec la fonction que j'ai trouvé sur Internet avec l'affichage de la liste de nombres.. C'est une fonction que je suis capable de faire en CAML très facilement..
Pourquoi ça marche avec les entiers, et pas avec les chaines de caractères ?
Je sais bien qu'il existe déjà des fonctions pour remplacer toutes les occurences du mot "caca" dans un texte. Mais ce que je veux, c'est savoir pourquoi mes fonctions récursives ne marchent pas.. Peut être qu'il y a quelque chose que je ne fais pas correctement.. J'ai besoins d'utiliser les fonctions récursives pour d'autres fonctions, mais je veux d'abord savoir faire des fonctions simples comme celles-ci...
Marsh Posté le 03-07-2005 à 19:20:31
Allez savoir pourquoi, j'ai refais ma fonction factorielle, et elle marche !
Code :
|
Je sens que ma chance reviens.. Je vais refaire ma fonction pour enlever les caca, et avec un peu de chance, elle marchera !!
Marsh Posté le 03-07-2005 à 19:23:15
Resoudre un probleme ABSOLUMENT PAS recursif par un algo recursif n'est pas quelque chose de forcement simple.
Bon dans ton exemple c marrant parce que dans la fonction Recur
Code :
|
Si le 1er mot a traiter n'est pas "caca" .... tu retraites la meme phrase ... qui n'a pas plus de chance de contenir "caca" au 2eme tour ...
Edit: J'ai rien dit ... je me suis perdu en lisant ton source.
Marsh Posté le 03-07-2005 à 19:37:47
lol c'est vrai que ce n'est pas très clair ces imbriquement de fonctions.
Hmm je ne sais pas pourquoi, mais tout a l'air de marcher un peu mieux qu'avant...
Maintenant j'arrive à faire fonctionner quelques morceaux de ma fonction... Mais c'est laborieux quand même..
Merci pourt on aide en tout cas !
Marsh Posté le 03-07-2005 à 20:04:03
3 conseils :
1. Commence par le cas le plus simple : celui où il n'y aura pas de récursivité, ce qui conduit à
2. TOUJOURS avoir un retour pour une fonction récursive, même quand à priori ça sert à rien, php a parfois des comportements étranges quand le return n'est pas clairement précisé
3. pitié, zappe moi ce
Code :
|
pour un
Code :
|
, ça évite un parsing inutile dans ta fonction Recur()
Marsh Posté le 04-07-2005 à 10:34:03
Hmm je ne pensais pas que c'était équivalent de retourner un false.. C'est un booléen, pas un string..
Hmm j'en ai marre, j'ai modifié un petit peu ma fonction, mais elle ne marche toujours pas...
Code :
|
C'est incroyable que ça ne marche pas ! Ma fonction est quand même correcte...
Marsh Posté le 04-07-2005 à 10:54:39
afbilou a écrit : Ce n'est pas le genre de probleme a apprehender avec de la recursivite |
+1
Docteur_Cube a écrit : Hmm j'en ai marre, j'ai modifié un petit peu ma fonction, mais elle ne marche toujours pas... |
prend un autre exemple
de plus tu utilises plein de fonctions qui ne sont pas vraiment utiles (ex : TailleTexte, SupprimerPremiersEspaces ...etc, ces fonctions existent déjà en php) et ça ne simplifie pas le debuggage...
sinon tu peux me dire pourquoi tu zap le 2eme argument dans tes appels recursifs ???
Marsh Posté le 04-07-2005 à 11:03:51
sinon tu peux me dire pourquoi tu zap le 2eme argument dans tes appels recursifs ??? |
+10 !
UUU je n'avais pas vu ça !! I.n.c.r.o.y.a.b.l.e !
C'est vrai pour les fonctions intermédiaires, mais j'aime bien utiliser mes fonctions, avec mes noms. C'est plus simple pour moi.. Par exemple pour obtenir la taille d'un texte, j'ai crée la fonction TailleTexte, qui ne fait qu'appeler la fonction strlen (il me semble).. Toutes ces fonctions sont simples, et je sais qu'elles marchent. Je peux donc faire abstraction de comment elles marchent. Et je les ai refait pour m'entrainer aussi.. Ici ce sont juste des fonctions pour essayer php, et ça ne correspond pas à un projet concret. Mais j'ai besoin de savoir utiliser les fonctions récursives pour un projet important..
Ce n'est pas le genre de problème à traiter avec la récursivité ? Mais alors pourquoi je n'ai fait que des trucs comme ça en CAML pendant un semestre ?
Marsh Posté le 04-07-2005 à 11:55:20
Docteur_Cube a écrit : Mais alors pourquoi je n'ai fait que des trucs comme ça en CAML pendant un semestre ? |
parce que les profs sont en général de mauvais développeurs (supprimer un mot dans une chaine se fait en une seule ligne en php, pas besoin de recursivité), un meilleur exemple aurait pu être de lister le contenu d'un dossier et de ses sous-dossiers
Marsh Posté le 03-07-2005 à 18:46:57
Bonjour !
Ca fait plusieurs heures que je cherche un moyen de créer des fonctions récursives en php.
Voici le contexte :
je suis étudiant en informatique (j'ai fait ma première année de licence). J'ai donc fait un semestre de CAML, et je connais assez bien les fonctions récursives et la programmation fonctionnelle.
Je me met au php, et j'ai lu qu'il était possible de faire des fonctions récursives en php. J'ai typiquement essayé de créer une fonction "factorielle($n)", mais ce fut sans succès.
J'ai donc cherché sur internet, et au fil de mes recherches, je suis tombé sur ce programme :
Il se trouve que ce programme fonctionne bien. (je l'ai modifié pour les besoins de la cause, mais il fonctionne).
De mon côté, j'ai fait un programme.. Au départ, il ne ressemblait pas du tout au programme ci-dessus, mais je l'ai adapté pour tenter de le faire fonctionner... En vain.
Voici mon programme original :
En langage algorithmique, cette derniere fonction se traduirait par :
Bref, comme je l'ai dit, j'ai modifié ma fonction pour tenter de la faire fonctionner un minimum :
Et bien figurez-vous que cette fonction ne marche pas !!
Et quand je dis que mes fonctions ne marchent pas, ce n'est pas qu'elles me causent une erreur : en fait, c'est comme si ça rechargeait la dernière bonne page valide.. Ca recharge la page précédente en fait...
Donc si vous pouviez m'aider, ça serait très sympa ! j'ai vraiment envie et besoins de faire des fonctions récursives en php, même si c'est lourd.
Merci par avance !
Message édité par Docteur_Cube le 03-07-2005 à 19:00:00