Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] Funzioni Ricorsive programma mcm

    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!!

    codice:
    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);
    
    
    }
    Ultima modifica di LeleFT; 27-10-2016 a 13:41 Motivo: Aggiunti i tag CODE

  2. #2
    Ragazzi per favore... Vorrei davvero capire. Grazie mille

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    fail post
    Ultima modifica di Scara95; 29-10-2016 a 16:07
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    codice:
    mcm((conta=+1)*n1)
    Chiami una funzione che accetta 2 parametri con 1 solo parametro


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


    codice:
    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:
    codice:
    #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:
    codice:
    #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;
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Grazie mille. Sei stato davvero molto d'aiuto! Sono inesperto purtroppo....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.