Calcolo potenza di un numero ricorsivo

di il
3 risposte

Calcolo potenza di un numero ricorsivo

Salve a tutti!
E' il mio primo anno che programmo e ho scoperto l'esistenza delle funzioni ricorsive
Sto cercando di realizzare un programma che calcoli la potenza di un numero in maniera esponenziale.

Il testo dell'esercizio da un suggerimento:
base^esponente = base - base^esponente-1
e dice che la condizione che serve per far terminare la condizione è quando l'esponente e' uguale a 1.

Ho provato a realizzare il programma ma senza successo...
Ecco il mio tentativo

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

int power (int a, int b); //prototipo della funzione

int main()
{
    int base,esp,risultato;

    printf("Esponenziale ricorsivo\n");
    printf("\n");

    printf("Digita la base: ");
    scanf("%d",&base);
    printf("Digita l'esponente: ");
    scanf("%d", &esp);

    risultato = power (base, esp); //richiamo la funzione per il calcolo della potenza

    printf("Risultato: %d \n",risultato);

    printf("\n Premi un tasto per uscire \n");


    return 0;
} //end main

int power (int b, int e)
{
    int i,x;

    for (i=0 ; i < e; i++)
    {
         if ( e == 1)
            break;
     x = b - power(b , e-1);

    } //fine del ciclo for

    return x; //return risultato

} //fine funzione
Il risultato ottenuto e' errato, se qualcuno mi potrebbe aiutarmi lo ringrazio in anticipo

p.s.
L'esercizio è del libro "C Corso completo di programmazione"

3 Risposte

  • Re: Calcolo potenza di un numero ricorsivo

    Ho trovato poco fa questa soluzione:
    https://it.wikibooks.org/wiki/Implementazioni_di_algoritmi/Elevazione_a_potenza#Implementazione_in_C.2FC.2B.2B_.E2.80.93_versione_ricorsiva

    Che ho capito, però non ho capito invece quella proposta dal libro...
  • Re: Calcolo potenza di un numero ricorsivo

    coppolino ha scritto:


    Salve a tutti!
    E' il mio primo anno che programmo e ho scoperto l'esistenza delle funzioni ricorsive
    Sto cercando di realizzare un programma che calcoli la potenza di un numero in maniera esponenziale.

    Il testo dell'esercizio da un suggerimento:
    base^esponente = base - base^esponente-1
    e dice che la condizione che serve per far terminare la condizione è quando l'esponente e' uguale a 1.

    Ho provato a realizzare il programma ma senza successo...
    Ecco il mio tentativo
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int power (int a, int b); //prototipo della funzione
    
    int main()
    {
        int base,esp,risultato;
    
        printf("Esponenziale ricorsivo\n");
        printf("\n");
    
        printf("Digita la base: ");
        scanf("%d",&base);
        printf("Digita l'esponente: ");
        scanf("%d", &esp);
    
        risultato = power (base, esp); //richiamo la funzione per il calcolo della potenza
    
        printf("Risultato: %d \n",risultato);
    
        printf("\n Premi un tasto per uscire \n");
    
    
        return 0;
    } //end main
    
    int power (int b, int e)
    {
        int i,x;
    
        for (i=0 ; i < e; i++)
        {
             if ( e == 1)
                break;
         x = b - power(b , e-1);
    
        } //fine del ciclo for
    
        return x; //return risultato
    
    } //fine funzione
    
    Il risultato ottenuto e' errato, se qualcuno mi potrebbe aiutarmi lo ringrazio in anticipo

    p.s.
    L'esercizio è del libro "C Corso completo di programmazione"
    Allora, la prima cosa, BANALE (robba da scuole medie) e' rendersi conto che
    
    base^esponente = base - base^esponente-1
    
    e' CANNATA !!!!.

    Che cosa e' un elevamento a pontenza?

    x^N e' x moltiplicato per se stesso N volte

    Quindi:
    
    x^1 -> x
    x^2 -> x*x
    x^3 -> x*x*x
    x^n -> x*....*x   n volte
    
    E ricordati anche che:
    
    x^0 -> 1
    
    (lasciamo perdere il caso in cui x e' 0: entrano in gioco limiti, ordine di infinito/infinitiesimo, ecc...)

    Ma se e' vero questo, allora, ad esempio
    
    x^3 -> x*x*x -> x * (x*x) -> x * (x^2)
    x^2 -> x * (x^1)
    x^1 -> x * (x^0)
    x^0 -> 1
    
    Quindi in generale
    
    x^n -> x * (x^(n-1))
    

    Quindi, dopo tutta questa manfrina, che c'azzecca (ho aggiunto le parentesi!)
    
    base^esponente = base - base^(esponente-1)
    
    ???

    Che ci fa quel segno MENO?

    E questa e' la parte semplice della questione.

    La parte complicata e' che il ciclo, all'interno della definizione di power, NON CI DEVE STARE: fondamentalmente, la ricorsione e' un'alternativa al ciclo (ti potrei fare tutta una spiegazione filosofica sul come e perche', ma al momento non ti serve).

    La tua funzione ricorsiva non deve usare cicli!
  • Re: Calcolo potenza di un numero ricorsivo

    Grazie
    Ciaoo
Devi accedere o registrarti per scrivere nel forum
3 risposte