Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    12

    Programma per il calcolo di una potenza

    Questo è un programma per il calcolo della potenza di un numero dato un certo esponente.
    Purtroppo, non funziona!
    Qualcuno potrebbe dirmi dove ho sbagliato ??

    #include<stdio.h>

    int power (int x,int y);

    int main()
    {
    int x;
    int y;
    scanf("%d%d\n",&x,&y);
    printf("%d",power(x,y));
    getchar();
    getchar();
    return 0;
    }

    int power(int x,int y)
    {
    if(x==0)
    return 0;
    if (y==0)
    return 1;
    else
    return ( x * power(x,y-1));



    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    A parte questo

    codice:
    scanf("%d %d",&x,&y);
    il resto mi sembra corretto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    12
    Grazie, sono un idiota!

  4. #4
    Consiglio: se lo scopo del programma è didattico per spiegare la ricorsione ok, ma dovendo scrivere "per davvero" una funzione di elevamento a potenza tieni conto che la versione iterativa è molto più efficiente di quella ricorsiva.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    56
    Originariamente inviato da MItaly
    tieni conto che la versione iterativa è molto più efficiente di quella ricorsiva.
    Davvero ?

    Una spiegazione del perchè ? Mi hai incuriosito

  6. #6
    Le chiamate a funzione non sono gratis: a seconda della convenzione di chiamata, dell'architettura su cui gira il programma, delle ottimizzazioni attivate e di altre cose, ogni chiamata richiede la memorizzazione sullo stack dei parametri, del puntatore allo stack frame precedente, la memorizzazione del valore restituito sullo stack e l'esecuzione del codice di cleanup dello stack; inoltre, se la funzione non è inline (e non è possibile rendere inline una funzione ricorsiva), non è possibile sfruttare i registri in maniera efficiente a cavallo tra una funzione e l'altra. L'implementazione iterativa, invece, non tocca lo stack (a meno che durante il calcolo non ci siano più valori in gioco dei registri disponibili), e può usare sempre gli stessi registri per effettuare il conto. Se cerchi nel forum, comunque, ne abbiamo parlato in passato.
    Amaro C++, il gusto pieno dell'undefined behavior.

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