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

    [C] ricorsione...aiuto per un esempio

    Ciao a tutti. Sto cercando di imparare cos'è la ricorsione e vorrei saperla utilizzare bene.

    Sto cercando di fare un esempio di programma che calcola in modo ricorsivo tramite una funzione, la potenza, cioè pow (base, esponente).

    Ho provato così, ma:
    - in compilazione mi da un warning che non capisco ("[Warning] conflicting types for built-in function 'pow' )

    - l'esecuzione parte lo stesso ma come risultato mi da sempre 0;

    codice:
    #include <stdio.h>
    
    
    /*
    IP Base
    IP Esponente
    OR pow
    */
    
    int pow (int base, int esponente) {
        if (esponente==1)
           return base;
        else
            return base*pow(base,esponente-1);
    } /* pow */
    
    
    int leggi (int base, int esp) {
        printf ("Base: "); scanf ("%d", &base);
        printf ("Esponente: "); scanf ("%d", &esp);
    } /* leggi */
    
    int main () {
        int base, esp;
        leggi (base,esp);
        printf ("%d", pow (base, esp));
        system ("pause");
    } /* main */
    Uso Dev-C++ come IDE.

  2. #2
    L'ho modificato così:
    codice:
    int potenza (int base, int esponente) {
        if (esponente<0)
           return 0;
        else if (esponente==0)
           return 1;
        else if (esponente>0)
                return base*potenza(base,esponente-1);
    } /* potenza */
    Ora non mi da nessun warning ma in esecuzione ottengo sempre 0.

    Qualcuno può aiutarmi?

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Dunque, il warning ti era dato poichè pow è una funzione della libreria standard (contenuta nel file math.h) e tu ne stavi facendo l'overloading, cosa abbastanza rara per una funzione standard.
    Chiamando la funzionie in un altro modo, il problema non arriva.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    L'errore sta nel fatto che nella funzione leggi (int base, int esp), base ed esp vengono passati per valore quindi le modifiche fatte non influenzano base ed esp contenute in main(), per risolvere ti basta mettere:
    codice:
        printf ("Base: "); scanf ("%d", &base);
        printf ("Esponente: "); scanf ("%d", &esp);
    all'interno di main().

  5. #5
    Non funziona comunque.

    Altri suggerimenti?

  6. #6
    Così funziona :
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int pot(int base,int esp) 
    {	
        if (esp==0)
    	return 1;
       else
        	return base*pot(base,esp-1);       
    }
    
    int main() 
    {
        int base, esp;
        printf ("Base: "); scanf ("%d",&base);
        printf ("Esponente: "); scanf ("%d",&esp);
        printf ("%d\n",pot(base,esp));
        system ("pause");
        return 0;
    }

  7. #7
    Originariamente inviato da king64
    Così funziona :
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int pot(int base,int esp) 
    {	
        if (esp==0)
    	return 1;
       else
        	return base*pot(base,esp-1);       
    }
    
    int main() 
    {
        int base, esp;
        printf ("Base: "); scanf ("%d",&base);
        printf ("Esponente: "); scanf ("%d",&esp);
        printf ("%d\n",pot(base,esp));
        system ("pause");
        return 0;
    }
    Grazie mille.
    Potresti dirmi cosa cambia dalla mia seconda versione che ho postato?
    Non vedo tante differenze...
    Forse nel fatto che leggevo i valori di base e esponente con una funzione che passava per valore i parametri?

  8. #8
    Ho inserito all'interno del main la lettura devi valori della base e dell'esponente , come anche indicato da SeTThino , e poi ho modificato la condizione limite di uscita all'interno della funzione . Saluti

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 © 2025 vBulletin Solutions, Inc. All rights reserved.