Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] Problema Vettori e Ricorsione!

    Ho un esercizio di questo tipo:

    Scrivere una funzione RICORSIVA in linguaggio C, con prototipo
    void somma_prefissi( long [], int );
    in grado di leggere una sequenza di lunghezza indefinita (comunque minore di 100 elementi)
    di interi positivi che terminino con il valore -1 come sentinella. Si deve salvare nel vettore in
    input nella cella i il valore della somma parziale dei primi i + 1 elementi. La funzione deve
    anche salvare il valore -1 come sentinella nell’array.
    Scrivere quindi un programma completo che dichiari le variabili opportunamente e stampi
    i valori del vettore calcolati dalla funzione somma_prefissi, separati da UNO spazio o da
    UN carattere di nuova riga. All’interno della funzione somma_prefissi vengono calcolate le
    somme e salvate nel vettore mentre all’interno della funzione main tale vettore ` stampato
    e
    come descritto sopra (tutti gli elementi separati da UNO spazio o da UN carattere di nuova
    riga).
    Esempio: Se l’input ` e
    1 2 3 4 5 6 10 12 -1
    il programma deve stampare
    1 3 6 10 15 21 31 43

    Non so propio dove mettere le mani dato che non ho capito come usare la ricorsione..qlkn puo gentilmente illuminarmi?

  2. #2
    Guarda noi l'abbiamo fatta da poco spero di esserti utile... una funzione ricorsiva è una funzione che richiama se stessa, ogni volta "semplificando" l'argomento della funzione richiamata in modo da tornare, in un numero finito di passaggi, ad un caso base (esempio famosissimo è il fattoriale).

    Per il problema io ti consiglio, dopo aver dichiarato il vettore, di leggere in input ogni valore e associarlo ad un indice del vettore, e trovare alla fine il -1 in che posizione è nel vettore.
    Ti troverai (con un opportuno if) che v[k+1] = -1 ; a questo punto innesti un ciclo decrescente dove v[k] = v[k] + v[k-1] + ... + v[0] e similmente per gli altri. Partendo dalla fine eviti praticamente tutti i problemi che si possono creare dal fatto che i valori si modificano.

    Infine stampi gli elementi fino a v[k], per lo spazio basta lasciare uno spazio dentro le virgolette. Per andare a capo ogni 10 invece (che fa sempre figo ) metti dentro il ciclo che farai per stampare ' if (i%10 == 0) printf("\n") ' [dove i è il contatore del ciclo] che rende tutto più carino.

  3. #3
    il fatto è che non riesco proprio a capire come far funzionare la ricorsione in questo esercizio...
    finchè parliamo di Serie di Fibonacci e Fattoriali ok..ma in questo caso non so proprio dove mettere le mani

  4. #4
    Originariamente inviato da DarkDevil666
    il fatto è che non riesco proprio a capire come far funzionare la ricorsione in questo esercizio...
    finchè parliamo di Serie di Fibonacci e Fattoriali ok..ma in questo caso non so proprio dove mettere le mani
    Ogni problema ricorsivo puo' essere "tradotto" in non ricorsivo e viceversa. Quindi dove sta il problema?
    Considera che generalmente gli essere umani utilizzano naturalmente algoritmi ricorsivi.
    ;-)

  5. #5
    eh lo so....infatti con l'iterazione nn sarebbe un problema risolvere l'esercizio..ma purtroppo devo usare la ricorsione.
    sono disperato

  6. #6
    codice:
    void somma_prefissi( long a[], int n )
    {
    	if ( n < 1 || a[n] == -1 )
    		return;	
    	
    	a[n] = a[n-1] + a[n];
    
    	somma_prefissi(a, n+1);
    }
    
    int main()
    {
    	int k;
    	long a[] = {1, 2, 3, 4, 5, 6, 10, 12, -1};
    
    	somma_prefissi(a, 1);
    
    	for(k = 0; a[k] != -1; k++)
    		printf("%d ", a[k]);
    
    	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 © 2024 vBulletin Solutions, Inc. All rights reserved.