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.