Problemi esercizi con funzioni ricorsive

di il
2 risposte

Problemi esercizi con funzioni ricorsive

Ho svolto 3 problemi su funzioni ricorsive con array, nessuno dei quali funziona, ma non capico quale siano gli errori, che evidentemente sono dati da un'errata comprensione del metodo. spero qualcuno riesca a correggermi.

1)scrivere una funzione che riceve un array di interi e restituisce il minimo.
2)scrivere una funzione ricorsiva che riceve un array di interi e restituisce 1 se gli elementi sono tutti dispari e 0 se non li sono.
3)scrivere una funzione ricorsiva che riceve un array di interi e restituisce il prodotto degli elementi negativi.

1)#include<stdio.h>
#include<stdlib.h>

int minore(int n,int *a);

int main(){
int i,n,min=0;
printf("inserisci il numero di elementi dell'array: ");
scanf("%d",&n);
int a[100]={0};
for(i=0;i<n;i++){
printf("inserisci l'elemento n.%d: ",i+1);
scanf("%d",&a);
}
min=minore(n,a);
printf("il minore \212: %d\n",min);
system("pause");
return 0;
}

int minore(int n,int *a){
int min=0;
if(n==0)return 0;
if(n==1) min=a[n-1];
else{
if(a[n-1]<min) min=a[n-1];
else min=minore(a,n-1);
}
return min;
}


2)
#include<stdio.h>
#include<stdlib.h>

int funzionedispari(int n, int *a);

int main(){
int n,i,d=0;
printf("inserisci il numero di elementi dell'array: ");
scanf("%d",&n);
int a[100]={0};
for(i=0;i<n;i++){
printf("inserisci un numero: ");
scanf("%d",&a);
}
d=funzionedispari(n,a);
printf("%d",d);
system("pause");
return 0;
}

int funzionedispari(int n, int *a){
int d=0;
if(n==0) return 0;
if(a[n-1]>0) return d;
if(a[n-1]<0&&funzionedispari(a,n-1)<0){
d=1;
return d;
}
}


3)
#include<stdio.h>
#include<stdlib.h>

int prodottonegativi(int n, int a[]);

int main(){
int i,p,n=0;
printf("inserisci il numero di elementi dell'array: ");
scanf("%d",&n);
int a[100]={0};
for(i=0;i<n;i++){
printf("inserisci l'elemento n.%d: ",i+1);
scanf("%d",&a);
}
p=prodottonegativi(n,a);
printf("il prodotto \212: %d\n",p);
system("pause");
return 0;
}

int prodottonegativi(int n, int a[]){
int p=1;
if(n==0) return 0;
else{
if(a[n-1]<0) p=p*a[n-1]*prodottonegativi(a,n-1);
else p=p*prodottonegativi(a,n-1);
}
return p;
}

tutti e tre i programmi presentano queste avvertenze:
[Warning] passing argument of '' makes pointer from integer without a cast
expected 'int *' but argument is of type 'int'
grazie in anticipo dell'aiuto.

2 Risposte

  • Re: Problemi esercizi con funzioni ricorsive

    Sbagli a passare gli argomenti all'interno delle funzioni. E poi perché inizializzi a con 100 elementi se subito prima ne chedi il numero?
  • Re: Problemi esercizi con funzioni ricorsive

    Quando dobbiamo realizzare funzioni ricorsive, solitamente individuiamo un passo base. Nella funzione "funzionedispari", io non credo che tu abbia individuato un passo base, se ci fosse un solo elemento nell'array, ritorni 0 se questo elemento è maggiore di 0 e ritorni 1 nel caso in cui l'elemento è minore di 0?
    Stessa cosa vale anche per la funzione "prodottonegativi", il caso base è n==0, supponiamo che ci sia un solo elemento nel vettore, dunque n=1. Indipendentemente se il primo elemento del vettore è negativo o positivo, una volta che viene richiamata la funzione, essa restituirà 0 e verrà moltiplicato per l'elemento del vettore.
    Non funziona logicamente, se vuoi maggiori aiuti, ti consiglio di esporre la logica che volevi applicare sui tuoi algoritmi, in modo che possiamo aiutarti maggiormente.
Devi accedere o registrarti per scrivere nel forum
2 risposte