PDA

Visualizza la versione completa : [C] Funzioni Ricorsive programma mcm


infogirl12
27-10-2016, 13:24
Salve a tutti ragazzi. Mi hanno assegnato di creare un programma che calcoli il mcm con funzioni ricorsive... Questo ci che sono riuscito a fare. Potete aiutarmi a capire dove ho sbagliato e perch non funziona? Grazie!!



int mcm(int n1, int n2) {

int conta==1;
int resto= mcm%n2;
if(resto==0) return n1*n2;
else return mcm((conta=+1)*n1);
}




int main() {
int n1, n2, mcm;
printf("\nInserisci il primo numero: "); scanf("%d", &n1);
printf("\nInserisci il secondo numero: "); scanf("%d", &n2);
printf("\Il mcm di %d e %d e' %d", n1, n2, mcm);


}

infogirl12
27-10-2016, 16:14
Ragazzi per favore... Vorrei davvero capire. Grazie mille

Scara95
29-10-2016, 15:45
fail post

Scara95
29-10-2016, 16:07
mcm((conta=+1)*n1)
Chiami una funzione che accetta 2 parametri con 1 solo parametro



int resto= mcm%n2;
Usi la variabile mcm, ma non dichiarata da nessuna parte: non una variabile globale, non un parametro della funzione e non una variabile locale.



int main() {
int n1, n2, mcm;

printf("\nInserisci il primo numero: ");
scanf("%d", &n1);
printf("\nInserisci il secondo numero: ");
scanf("%d", &n2);

printf("\Il mcm di %d e %d e' %d", n1, n2, mcm);
}
mcm una variabile non inizializzata che stampi a video: un valore random
manca il return


La soluzione pi banale per trovare mcm ricorsivamente partire a contare da 1 e vedere se viene diviso da entrambi:
#include <stdio.h>

int mcm(int n, int m, int mcm_v) {
if(mcm_v%n == 0 && mcm_v%m==0) {
return mcm_v;
}
else {
return mcm(n, m, mcm_v+1);
}
}


int main(void) {
int n, m;
printf("Inserisci il primo numero naturale positivo: ");
scanf("%d", &n);
printf("Inserisci il secondo numero naturale positivo: ");
scanf("%d", &m);
printf("mcm(%d, %d) = %d", n, m, mcm(n, m, 1));
return 0;
}


Alternativamente puoi usare la relazione mcm(n,m)=n*m/MCD(n,m) e spostare la ricorsione su MCD:


#include <stdio.h>


int MCD(int n, int m) {
if(m > n) {
return MCD(m, n);
}
else if(m==0) {
return n;
}
else {
return MCD(m, n%m);
}
}


int mcm(int n, int m) {
return n/MCD(n, m)*m;
}


int main(void) {
int n, m;
printf("Inserisci il primo numero naturale positivo: ");
scanf("%d", &n);
printf("Inserisci il secondo numero naturale positivo: ");
scanf("%d", &m);
printf("mcm(%d, %d) = %d", n, m, mcm(n, m));
return 0;
}

infogirl12
29-10-2016, 17:07
Grazie mille. Sei stato davvero molto d'aiuto! Sono inesperto purtroppo....

Loading