PDA

Visualizza la versione completa : [C] funzioni ricorsive


robynho86
28-06-2009, 12:27
Ciao a tutti, ho un problema con una funzione ricorsiva, non capisco dove sbaglio e perchè quando faccio partire il programmino mi si blocca.. se qualcuno può aiutarmi gli sarei molto grato.. grazie a tutti in anticipo..

/*Esercizio N.2 : Scrivere una funzione ricorsiva che accetti in ingresso un vettore v di dimensione n e calcoli
ricorsivamente la somma dei suoi elementi, Verificare dal main il funzionamento*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
int somma (int *);
main()
{ int v[N],i;
srand(time(NULL));
for (i=0; i<N ;i++)
{
v[i] = rand()%10;
printf("\nV[%d] == %d",i,v[i]);
}
printf("\n\n");
printf("La somma degli elementi di V e' %d",somma(v));
fflush(stdin);
getchar();
}

int somma(int *v)
{
int i=0;
int x=0;
if (i==N-1)
{
x += v[i+1];
return (x);
}
else
{
return (x += somma(v++));
}

}

shodan
28-06-2009, 12:48
Se azzeri la variabile rossa a ogni ricorsione, essa non avrà mai fine (teorica).
Devi passare la variabile i come parametro alla funzione.


int somma(int *v)
{
int i=0;
int x=0;
if (i==N-1)
{
x += v[i+1];
return (x);
}
else
{
return (x += somma(v++));
}
}

Es.


int somma(int *v,int i )
{
int x=0;
if (i==N-1)
{
x += v[i+1];
return (x);
}
else
{
return (x += somma(v++,i++));
}
}

robynho86
28-06-2009, 15:13
non mi funziona neanche così... al momento il codice è il seguente, però mi s blocca nello stesso istante...

/*Esercizio N.2 : Scrivere una funzione ricorsiva che accetti in ingresso un vettore v di dimensione n e calcoli
ricorsivamente la somma dei suoi elementi, Verificare dal main il funzionamento*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
int somma (int *,int i);
main()
{ int v[N],i;
srand(time(NULL));
for (i=0; i<N ;i++)
{
v[i] = rand()%10;
printf("\nV[%d] == %d",i,v[i]);
}
printf("\n\n");
i=0;
printf("La somma degli elementi di V e' %d",somma(v,i));
fflush(stdin);
getchar();
}

int somma(int *v,int i)
{

int x=0;
if (i==N-1)
{
x += v[i+1];
return (x);
}
else
{
return (x += somma(v++,i++));
}

}

mondobimbi
28-06-2009, 16:04
prova così


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int somma( const int *v, int count )
{
return count ? v[count - 1] + somma ( v++, --count ) : 0 ;
}

int main()
{

const int v[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ;
size_t count = sizeof(v) /sizeof(int);

printf("La somma degli elementi di V e' %d\n", somma( v, count ));

return ( 0 );

}

Loading