Voici la fonction que j'ai faite, mais elle ne fonctionne pas comem je
voudrais,
en fait, elle s'arrete à 0 (normal). Le problème, c'est que je n'arrive pas
à définir la condition d'arret.
Pourriez-vous m'aider SVP ... ?
[code]
int fct (int n)
{
if (n==-n) return n; //Un peu débile comme condition.....
cout<< (-n)<<' ';
return(fct(n-1));
}
[/code]
On Thu, 13 Nov 2003 21:09:45 +0100, "ANNE Alexis" wrote:
En même temps, pourquoi ne pas utiliser une simple boucle itérative, afin de ne pas gaspiller de ressources en appels de fonctions?
AMHA, c'est une condition imposée par un prof.
-- ;-)
kanze
Vincent Richard wrote in message news:<3fb3bf85$0$13287$...
int fct(int n) { int i; for(i=-n; i<=n; i++) { cout<<n<<' '; } }
Euh... ca ne ressemble pas trop à une fonction *récursive*. :-)
Peut-être, mais c'est bien la solution que j'utiliserais, moi. Avec quelque changements mineur :
void fnc( int n ) { assert( n >= 0 && n != INT_MAX ) ; for ( int i = -n ; i <= n ; ++ i ) { if ( i != -n ) { std::cout << ' ' ; } std::cout << n ; } }
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Vincent Richard <chere-loque.MARRE-DE-LA-PUB@wanadoo.fr.invalid> wrote
in message news:<3fb3bf85$0$13287$626a54ce@news.free.fr>...
int fct(int n)
{
int i;
for(i=-n; i<=n; i++)
{
cout<<n<<' ';
}
}
Euh... ca ne ressemble pas trop à une fonction *récursive*. :-)
Peut-être, mais c'est bien la solution que j'utiliserais, moi. Avec
quelque changements mineur :
void
fnc( int n )
{
assert( n >= 0 && n != INT_MAX ) ;
for ( int i = -n ; i <= n ; ++ i ) {
if ( i != -n ) {
std::cout << ' ' ;
}
std::cout << n ;
}
}
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Vincent Richard wrote in message news:<3fb3bf85$0$13287$...
int fct(int n) { int i; for(i=-n; i<=n; i++) { cout<<n<<' '; } }
Euh... ca ne ressemble pas trop à une fonction *récursive*. :-)
Peut-être, mais c'est bien la solution que j'utiliserais, moi. Avec quelque changements mineur :
void fnc( int n ) { assert( n >= 0 && n != INT_MAX ) ; for ( int i = -n ; i <= n ; ++ i ) { if ( i != -n ) { std::cout << ' ' ; } std::cout << n ; } }
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Pierre Maurette
"kip" a écrit [...]
Ben, pour une fois, c pas un devoir maison, mais c pour ..... disons, de la
ciulture générale !
void fct( int n ) { cout << - n << " " ; //Afficher -n if( n == 0 ) return; // 0 ne sera affiché qu'une seule fois else fct( n-1 ); //Afficher -(n-1) ... (n-1) cout << n << " "; //Afficher n }
Oui, elle fonctionne !
Culture générale ou devoir, peu importe. La solution proposée est certainement ce qu'attend le rédacteur de l'exercice.
Une autre version :
void fct (int n) { static const fin = -n-1; if (n == fin) return; cout << -n << " "; fct(n-1); } Je crains que le fait de vouloir utiliser un static dénote que vous ne
raisonnez pas "récursif" mais "boucle". En revanche, vous pourriez modifier le code de Benoit en :
void fct( int n ) { static unsigned int nb_appels = 0; // ou variable globale int id_appel = rand(); nb_appels++; std::cout << - n << "/" << nb_appels << "/" << id_appel << std::endl; if( n == 0 ) return; else fct( n-1 ); std::cout << n << "/" << nb_appels << "/" << id_appel << std::endl; }
La sortie de ce truc-là peut vous éclairer.
Pierre
"kip" <kip.kip@laposte.net.nospam> a écrit
[...]
Ben, pour une fois, c pas un devoir maison, mais c pour ..... disons, de
la
ciulture générale !
void fct( int n )
{
cout << - n << " " ; //Afficher -n
if( n == 0 ) return; // 0 ne sera affiché qu'une seule fois
else fct( n-1 ); //Afficher -(n-1) ... (n-1)
cout << n << " "; //Afficher n
}
Oui, elle fonctionne !
Culture générale ou devoir, peu importe. La solution proposée est
certainement ce qu'attend le rédacteur de l'exercice.
Une autre version :
void fct (int n)
{
static const fin = -n-1;
if (n == fin) return;
cout << -n << " ";
fct(n-1);
}
Je crains que le fait de vouloir utiliser un static dénote que vous ne
raisonnez pas "récursif" mais "boucle".
En revanche, vous pourriez modifier le code de Benoit en :
void fct( int n )
{
static unsigned int nb_appels = 0; // ou variable globale
int id_appel = rand();
nb_appels++;
std::cout << - n << "/" << nb_appels << "/" << id_appel << std::endl;
if( n == 0 ) return;
else fct( n-1 );
std::cout << n << "/" << nb_appels << "/" << id_appel << std::endl;
}
Ben, pour une fois, c pas un devoir maison, mais c pour ..... disons, de la
ciulture générale !
void fct( int n ) { cout << - n << " " ; //Afficher -n if( n == 0 ) return; // 0 ne sera affiché qu'une seule fois else fct( n-1 ); //Afficher -(n-1) ... (n-1) cout << n << " "; //Afficher n }
Oui, elle fonctionne !
Culture générale ou devoir, peu importe. La solution proposée est certainement ce qu'attend le rédacteur de l'exercice.
Une autre version :
void fct (int n) { static const fin = -n-1; if (n == fin) return; cout << -n << " "; fct(n-1); } Je crains que le fait de vouloir utiliser un static dénote que vous ne
raisonnez pas "récursif" mais "boucle". En revanche, vous pourriez modifier le code de Benoit en :
void fct( int n ) { static unsigned int nb_appels = 0; // ou variable globale int id_appel = rand(); nb_appels++; std::cout << - n << "/" << nb_appels << "/" << id_appel << std::endl; if( n == 0 ) return; else fct( n-1 ); std::cout << n << "/" << nb_appels << "/" << id_appel << std::endl; }
La sortie de ce truc-là peut vous éclairer.
Pierre
ANNE Alexis
"Fabien LE LEZ" a écrit dans le message de news:
On Thu, 13 Nov 2003 21:09:45 +0100, "ANNE Alexis" wrote:
En même temps, pourquoi ne pas utiliser une simple boucle itérative, afin de
ne pas gaspiller de ressources en appels de fonctions?
AMHA, c'est une condition imposée par un prof.
Dans ce cas, en effet, mieux vaut utiliser la récursivité.
"Fabien LE LEZ" <gramster@gramster.com> a écrit dans le message de news:
fcr7rvslqqno6mmu33qeh87tknupe8cdcr@4ax.com...
On Thu, 13 Nov 2003 21:09:45 +0100, "ANNE Alexis" <anne_a@epita.fr>
wrote:
En même temps, pourquoi ne pas utiliser une simple boucle itérative, afin
de
ne pas gaspiller de ressources en appels de fonctions?
AMHA, c'est une condition imposée par un prof.
Dans ce cas, en effet, mieux vaut utiliser la récursivité.