OVH Cloud OVH Cloud

Fonction Recursive

16 réponses
Avatar
Jessy Sempere [MVP]
Bonjour à tous

J'ai fais un bout de code sous Access donc en VBA...

Ce code utilises une fonction récursive qui marche très bien, par contre
elle a 2 arguments :
- un de type string,
- et un tableau.

Les 2 évolues en fonction du niveau de récursivité.

Le problème est la lenteur de cette récursivité, pour éventuellement
accélérer tout ça, j'ai retranscrit
mon code en VB sous visual studio .net...

A mon grand désespoir, la récursivité pour l'argument de type string
fonctionne mais par celle pour l'argument tableau, celui-ci ne garde par ses
valeurs en fonction du son niveau de récursivité ???

Ma question est donc peut-on faire sous VB une fonction récursive avec un
argument tableau où est-ce impossible ???

Merci à tous de vos lumière.

@+
Jessy Sempere - Access MVP
news@access.fr.vu
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------

6 réponses

1 2
Avatar
Jean-Marc
"Clive Lumb" a écrit dans le
message de news:

"Jessy Sempere [MVP]" a écrit dans le


message de
news:
> Re,
>
> Merci de t'interesser à mon problème...
> J'ai fais un test avec le même code que toi, et j'obtiens 47


secondes
> Si tu veux, je peux t'envoyer une matrice qui fais 54 sur 54...
> Perso je l'ai lancé sous VBA et je n'ai pas planté mais après


quelques
> heures j'ai arrêté le code...
>
> PS : Je pense savoir d'où viens mon problème sous VB.NET, il me


semble
qu'en
> VBA et VB6, les arguments d'une fonction sont passer par défaut par
> référence, hors quand j'ai retranscris mon code, mes arguments sont


passer
> par valeur (byVal) ???
>
Dans le mille !!!




Ceci expliquant pourquoi il faut *toujours* utiliser
les mots clés ByVal et Byref pour préfixer tous les
paramètres des fonctions: C'est plus clair pour ceux
qui lisent, plus facile à maintenir et ça évite ce genre de
gags ...

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Jessy Sempere [MVP]
Re,

Je teste tout ça ce soir, et je vous dirais demain si ça fonctionne en
mettant ByRef en VB .NET

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Jean-Marc" a écrit dans le message de
news:43f4a75f$0$15931$
"Clive Lumb" a écrit dans le
message de news:
>
> "Jessy Sempere [MVP]" a écrit dans le
message de
> news:
> > Re,
> >
> > Merci de t'interesser à mon problème...
> > J'ai fais un test avec le même code que toi, et j'obtiens 47
secondes
> > Si tu veux, je peux t'envoyer une matrice qui fais 54 sur 54...
> > Perso je l'ai lancé sous VBA et je n'ai pas planté mais après
quelques
> > heures j'ai arrêté le code...
> >
> > PS : Je pense savoir d'où viens mon problème sous VB.NET, il me
semble
> qu'en
> > VBA et VB6, les arguments d'une fonction sont passer par défaut par
> > référence, hors quand j'ai retranscris mon code, mes arguments sont
passer
> > par valeur (byVal) ???
> >
> Dans le mille !!!


Ceci expliquant pourquoi il faut *toujours* utiliser
les mots clés ByVal et Byref pour préfixer tous les
paramètres des fonctions: C'est plus clair pour ceux
qui lisent, plus facile à maintenir et ça évite ce genre de
gags ...

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;



Avatar
Jessy Sempere [MVP]
Bonjour

Finalement, j'ai déclaré les arguments de ma fonction récursives en ByRef et
malheureusement, j'ai toujours le même problème...

Sinon, vincent, tu avais testé la matrice que j'avais fourni en exemple sous
VB6, mais est-ce que tu obtenais les même résultats que moi, à savoir 12
solutions possibles ???

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Jean-Marc" a écrit dans le message de
news:43f4a75f$0$15931$
"Clive Lumb" a écrit dans le
message de news:
>
> "Jessy Sempere [MVP]" a écrit dans le
message de
> news:
> > Re,
> >
> > Merci de t'interesser à mon problème...
> > J'ai fais un test avec le même code que toi, et j'obtiens 47
secondes
> > Si tu veux, je peux t'envoyer une matrice qui fais 54 sur 54...
> > Perso je l'ai lancé sous VBA et je n'ai pas planté mais après
quelques
> > heures j'ai arrêté le code...
> >
> > PS : Je pense savoir d'où viens mon problème sous VB.NET, il me
semble
> qu'en
> > VBA et VB6, les arguments d'une fonction sont passer par défaut par
> > référence, hors quand j'ai retranscris mon code, mes arguments sont
passer
> > par valeur (byVal) ???
> >
> Dans le mille !!!


Ceci expliquant pourquoi il faut *toujours* utiliser
les mots clés ByVal et Byref pour préfixer tous les
paramètres des fonctions: C'est plus clair pour ceux
qui lisent, plus facile à maintenir et ça évite ce genre de
gags ...

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;



Avatar
Vincent Guichard
Jessy Sempere [MVP] a écrit :
Bonjour

Finalement, j'ai déclaré les arguments de ma fonction récursives en ByRef et
malheureusement, j'ai toujours le même problème...

Sinon, vincent, tu avais testé la matrice que j'avais fourni en exemple sous
VB6, mais est-ce que tu obtenais les même résultats que moi, à savoir 12
solutions possibles ???



J'obtiens TabCombi = { 0,0,0,0,0,1,0,1,0,1,1,1 }

Vincent Guichard
Avatar
Jessy Sempere [MVP]
Re,

En fait la solution doit se trouver dans le tableau tabSolutions, il doit
contenir 12 éléments qui sont :
"1;3;12"
"1;5;10"
"1;10;12"
"2;4;11"
"2;6;9"
"2;9;11"
"3;5;8"
"3;8;12"
"4;6;7"
"4;7;11"
"5;8;10"
"6;7;9"

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://www.mpfa.info/
------------------------------------
"Vincent Guichard" a écrit dans le message de
news:43f5adff$0$29179$
Jessy Sempere [MVP] a écrit :
> Bonjour
>
> Finalement, j'ai déclaré les arguments de ma fonction récursives en


ByRef et
> malheureusement, j'ai toujours le même problème...
>
> Sinon, vincent, tu avais testé la matrice que j'avais fourni en exemple


sous
> VB6, mais est-ce que tu obtenais les même résultats que moi, à savoir 12
> solutions possibles ???

J'obtiens TabCombi = { 0,0,0,0,0,1,0,1,0,1,1,1 }

Vincent Guichard


Avatar
Vincent Guichard
Jessy Sempere [MVP] a écrit :
Re,

En fait la solution doit se trouver dans le tableau tabSolutions, il doit
contenir 12 éléments qui sont :
"1;3;12"
"1;5;10"
"1;10;12"
"2;4;11"
"2;6;9"
"2;9;11"
"3;5;8"
"3;8;12"
"4;6;7"
"4;7;11"
"5;8;10"
"6;7;9"

@+



Yep, c'est ça.

Vincent Guichard
1 2