PDA

Visualizza la versione completa : [C] Problematiche su funzioni ricorsive


josip
21-06-2013, 16:10
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:


#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");
}

josip
21-06-2013, 16:15
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.

linoma
21-06-2013, 16:41
Semplice devi fare una funzione che a sua volta richiami se stessa fino a quando non arrivi alla fine del vettore



func(V,DIM,s){
if(s >=V)
return;
func(V,DIM,s+1);
}

MItaly
21-06-2013, 17:01
Un approccio semplice può essere del tipo:


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... :stordita:

Loading