Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [C] funzioni ricorsive

  1. #1

    [C] funzioni ricorsive

    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..
    codice:
    /*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++));
        } 
        
    }

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [C] funzioni ricorsive

    Se azzeri la variabile rossa a ogni ricorsione, essa non avrà mai fine (teorica).
    Devi passare la variabile i come parametro alla funzione.
    codice:
    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.
    codice:
    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++));
        } 
    }
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    non mi funziona neanche così... al momento il codice è il seguente, però mi s blocca nello stesso istante...
    codice:
    /*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++));
        } 
        
    }

  4. #4
    prova così
    codice:
    #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 );
    
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.