Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    2

    [C] Problematiche su funzioni ricorsive

    Ciao a tutti!
    Sto seguendo un corso di programmazione in C. Nella prova d'esame viene richiesto di creare delle funzioni ricorsive.

    Credo di aver capito il meccanismo della ricorsione ma negli esercizi ci viene richiesto di non fare uso di variabili e/o statiche per risolvere problemi che sarebbero altrimenti banali se queste si potessero usare. Per esempio un esercizio degli anni passati chiede:

    definire una procedura ricorsiva che dato un vettore A di interi distinti di dimensione non nulla e la sua lunghezza, lo modifica facendo in modo che ogni A[i] assuma il valore della somma degli elementi precedenti e dell'elemento stesso. Nella soluzione non possono essere utilizzati vettori di supporto, né strutture dinmiche.

    ad esempio se il vettore iniziale fosse 5 4 3 7 8 2
    il vettore modificato dalla procedura sarebbe: 5 9 12 19 27 29

    ringrazio in anticipo chiunque abbia il buon cuore di aiutarmi.

    Questo dovrebbe essere il main:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define DIM 8
    
    
    
    main() {  
      int i;
      int* vet[DIM];
    
      printf("Inserisci gli elementi dell' array:\n");
      for (i = 0; i < DIM; i++) {
        printf("> ");
        scanf("%d", *vet);
      }
        
      funzione(vet[DIM], DIM);
    
     for (i = 0; i < DIM; i++) 
        printf("%d\n", &v[i]);
      
        system("pause");
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    2
    Premetto che ci sono molti esercizi di questo tipo e quindi una soluzione anche solo di questo mi darebbe una grande mano. Inoltre se qualcuno conosce qualche sito dove posso trovare esercizi svolti di questo tipo o con le stesse condizioni iniziali (ovvero nessun uso di variabili statiche e dinamiche e funzioni ricorsive su vettori) mi farebbe un grande favore se me li segnalasse.

  3. #3
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Semplice devi fare una funzione che a sua volta richiami se stessa fino a quando non arrivi alla fine del vettore

    codice:
    func(V,DIM,s){
    	if(s >=V)
    		return; 
    	func(V,DIM,s+1);
    }
    Per gli Spartani e Sparta usa spartan Il mio github

  4. #4
    Un approccio semplice può essere del tipo:
    codice:
    void funzione(int * vec, unsigned int dim)
    {
        helper_funzione(vec, dim, 0);
    }
    
    void helper_funzione(int * vec, unsigned int dim, int sum)
    {
        if(dim!=0)
        {
            *vec+=sum;
            helper_funzione(vec+1, dim-1, *vec);
        }
    }
    Ragionaci un po' su per capire come funziona.

    Tra parentesi, nel main l'uso e la dichiarazione dell'array sono errati: int* vet[DIM] non dichiara un vettore di DIM int, ma un vettore di DIM puntatori ad int; inoltre, funzione(vet[DIM], DIM) richiama funzione passandoci il DIM-esimo elemento di vet. Ripassati il capitolo sui vettori nel tuo libro di C...
    Amaro C++, il gusto pieno dell'undefined behavior.

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.