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!