CÓDIGO:
#includedouble potencia (int x, int y) { double resultado; if(y == 0) resultado = 1; else resultado = x * potencia(x,y-1); return resultado; } int main(void) { int base=0, exponente=0; printf("\t\tPROGRAMA PARA CALCULAR UNA POTENCIA\n\n"); printf("Dame el valor de la base -> "); scanf("%d", &base); printf("Dame el valor del exponente -> "); scanf("%d", &exponente); printf("%d elevado a %d es = %f", base, exponente, potencia(base, exponente)); return 0; }
¿Cómo funciona el código?
Éste es el bloque recursivo:
double potencia (int x, int y) { double resultado; if(y == 0) resultado = 1; else resultado = x * potencia(x,y-1); return resultado; }
Variables tipo double para evitar algún desbordamiento. La función recibe 2 parametros:
int x = Base de la potencia
int y = Exponente de la potencia
Necesitamos otra variable double que será la que almacenara el resultado.
Es caso base es if (y==0)
Supongamos = 5^5 , entonces:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizpE9VyjZvtqkCu3h0zL6Q6Q7RzYrsFSu0F48ez3QHWMorUBjYXo4PXhvOY47uIv-1Vn6VlL-iERogsCe-RpJtUOXlIZIWiYjbX5xkHiQgs-ViVatOIH7nYPZIFgE5UX6GT59bICW37oRn/s320/1.png)
En este punto el caso base se cumple puesto que el exponente ( y ) es cero
double potencia (5, 0) { double resultado; 0 == 0 (SE CUMPLE EL CASO BASE) REGRESA 1;
Ahora cada subrutina comenzara a resolverse con el valor la anterior le regresa y asi llegaremos al resultado
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP8MzTsHHHTk1lKVuCUI_C1lApPryUjyEbW9Wy96TVHZhqaY8cvefjgHoYIHmS-Ce1oFiEVBZKKfy2SHdG4il9WrZhxbOTbrlcDxcTqyPm0JvrIv7iC42ZsRdu9folFGqtnQR-WHoFy-6y/s320/2.png)
DESCARGA: Potencia.c
SALUDOS!! ^_^
Te pongo tres puntos en el lab por esta entrada.
ResponderEliminar