Ricorsione, condizioni necessarie

di il
1 risposte

Ricorsione, condizioni necessarie

Non riesco a capacitarmi delle condizioni necessarie per far funzionare una ricorsione in C.
Ecco i dubbi:

1) Se devo analizzare gli elementi di un array di int che soddisfano certe proprietà il caso base deve essere n==0 o n==1?? Perchè non sfora la lunghezza dell'array il caso n==0?? Può mai esistere un array di zero elementi??

2) Perché nel passo induttivo se inserisco la chiamata alla ricorsiva all'inizio del blocco funziona e alla fine no??

void test(int *a, int n, int p, int q, int *x, int *y){
	
	if(n==0)
		*x = *y = 0;
		
	else{
		if(*a==p)
			(*x)++;
		if(*a==q)
			(*y)++;	
		test(a+1, n-1, p, q, x, y);  \\ NON FUNZIONA SE NON LO METTO ALL'INIZIO DI ELSE!!
	}
}

3) Se dichiaro una variabile all'interno della ricorsiva, non me la ridichiara in tutte le chiamate che fa?? Come posso ovviare a questo problema e usare i contatori??


4) Avete qualche suggerimento/esercizio per farmi entrare meglio in testa queste righe tediose??


Vi ringrazio infinitamente per le risposte.

1 Risposte

  • Re: Ricorsione, condizioni necessarie

    1) in C un array è in pratica un puntatore ad un'area di memoria; per questo non ha senso pensare ad un array di 0 elementi, il puntatore punterà sempre almeno ad una locazione, la [0]
    2) fai il debug inserendo delle printf()
    3) usa variabili static
    4) con una buona ricerca su google trovi molti esempi
Devi accedere o registrarti per scrivere nel forum
1 risposte