Stack overflaw [VC++] - Programmation
Marsh Posté le 17-05-2001 à 14:00:34
juldjin a écrit a écrit : j'ai fais une fonction de récurtion qui a mon avis ne plante pas, mais requiert un nombre tres important de recursions, mon prog marche plus à la 17151 eme. est ce que l'on peut agrandir le truc stack ou pas ? |
Oui on peut
Mais est-il raisonnable de faire plus de 17150 recursions ?
Marsh Posté le 17-05-2001 à 14:02:15
ben dans la mesur ou je doit reconnaitre des formes de tres grandes tailles sur des images de tres grandes tailles, je n'ai pas trop le choix...
Marsh Posté le 17-05-2001 à 14:09:08
si, y'a toujours le choix
soit tu derecurssifie a la main et la c'est toi qui gere la taille de la pille (c'est pas dur, faut juste etre methodique)
soit tu changes d'algo
[edit]--Message édité par wpk--[/edit]
Marsh Posté le 17-05-2001 à 14:12:36
voici ma fonction qui compte le nombre de pixels par formes :
void MONIMAGESEGM::compte(int x,int y,int &somme)
{
if (x<0 || x>=im.tailleX || y<0 || y>=im.tailleY)
return; // si les coordonnées de la case à tester ne sont pas valides
else if (temp[x][y] == -1 || temp[x][y] == 1)
return; // si la case a déjà été marquée ou n'appartient pas à la forme
else
{
temp[x][y]=1; // on marque la case
somme++; // on ajourte 1 au nombre de pixels de la forme
if(x > 0) compte(x-1,y,somme);
if(x < im.tailleX - 1) compte(x+1,y,somme);
if(y > 0) compte(x,y-1,somme);
if(y < im.tailleY - 1) compte(x,y+1,somme);
if(x > 0 && y > 0) compte(x-1,y-1,somme);
if(x > 0 && y < im.tailleY - 1) compte(x-1,y+1,somme);
if(x < im.tailleX - 1 && y > 0) compte(x+1,y-1,somme);
if(x < im.tailleX - 1 && y < im.tailleY - 1) compte(x+1,y+1,somme);
}
}
imaginé si une forme fait la moitié d'une image de 1024*768...
Marsh Posté le 17-05-2001 à 14:12:44
voici ma fonction qui compte le nombre de pixels par formes :
void MONIMAGESEGM::compte(int x,int y,int &somme)
{
if (x<0 || x>=im.tailleX || y<0 || y>=im.tailleY)
return; // si les coordonnées de la case à tester ne sont pas valides
else if (temp[x][y] == -1 || temp[x][y] == 1)
return; // si la case a déjà été marquée ou n'appartient pas à la forme
else
{
temp[x][y]=1; // on marque la case
somme++; // on ajourte 1 au nombre de pixels de la forme
if(x > 0) compte(x-1,y,somme);
if(x < im.tailleX - 1) compte(x+1,y,somme);
if(y > 0) compte(x,y-1,somme);
if(y < im.tailleY - 1) compte(x,y+1,somme);
if(x > 0 && y > 0) compte(x-1,y-1,somme);
if(x > 0 && y < im.tailleY - 1) compte(x-1,y+1,somme);
if(x < im.tailleX - 1 && y > 0) compte(x+1,y-1,somme);
if(x < im.tailleX - 1 && y < im.tailleY - 1) compte(x+1,y+1,somme);
}
}
imaginé si une forme fait la moitié d'une image de 1024*768...
Marsh Posté le 17-05-2001 à 14:42:38
surtout qu'il y'a des methodes topologiques pour faire ca... et t'as plus du tout de recurss.
Marsh Posté le 17-05-2001 à 14:45:03
je pense qu'il est possible d'ameliorer un peu cet algo et c'est evident que pour ce genre de probleme, la recursivité n'est pas le meilleur choix (meme si c'est plus facile a programmer).
Faut reflechir un peu en fait !!!
Marsh Posté le 17-05-2001 à 14:47:29
ouais mais moi je suis pas un maitre en algorithmes
apres je vais exporter les formes en .shp alors respect comme meme pour un stagiaire de dut info...
merci
et si vous avez d'autres solutions a me proposer faites offre
Marsh Posté le 17-05-2001 à 13:58:33
j'ai fais une fonction de récurtion qui a mon avis ne plante pas, mais requiert un nombre tres important de recursions, mon prog marche plus à la 17151 eme.
est ce que l'on peut agrandir le truc stack ou pas ?
---------------
"l'homme est un loup pour l'homme"