Autor
|
Tema: Calcular potencia con recursividad (Leído 11,935 veces)
|
sora_ori
Desconectado
Mensajes: 269
|
Hola compañeros, estoy un poco confuso en como puedo realizar el siguiente ejercicio. Tengo la siguiente función y tengo que calcular la potencia de forma recursiva: función(x,n): 1 si n = 0 x si n = 1 (x^(n/2))^2 si n es par, n>1 x*(x^((n-1)/2))^2 si n es impar, n>2 Y bueno dejaré mi pobre código esperando un poco de ayuda #include<stdio.h> #include<conio.h> /* Declaración de funciones */ int potencia (int); int main(void){ int n; printf("Esribe un numero para calcular su potencia: "); printf("\nLa pontencia del numero %i es %i", n , potencia (n )); return 0; } int potencia(n){ if (n == 0) return 0; if (n == 1) return 1; if (n % 2 == 0){ (x^(n/2))^2 } else{ x*(x^((n-1)/2))^2 } }
|
|
|
En línea
|
|
|
|
Stakewinner00
|
Sin mirar mucho hay dos cosas que claramente están mal 1 si n = 0 if (n == 0) return 0; aquí haces lo contrario, si n == 0 tendrías que devolver 1 no 0. Y una función recursiva debe llamarse a si misma, y tu función potencia no lo hace, no es recursiva.
|
|
|
En línea
|
|
|
|
sora_ori
Desconectado
Mensajes: 269
|
Gracias Stakewinner, lo voy entendiendo solo que al ver esa formula se me esta complicando. Entonces ahora me quedaría así: #include<stdio.h> #include<conio.h> /* Declaración de funciones */ int potencia (int); int main(void){ int n; printf("Esribe un numero para calcular su potencia: "); printf("\nLa pontencia del numero %i es %i", n , potencia (n )); return 0; } int potencia(n){ if (n == 0) return 1; if (n == 1) return 0; if (n % 2 == 0){ (potencia^(n/2))^2 } else{ potencia*(potencia^((n-1)/2))^2 } }
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Mucho cuidado. Ahí es todo erróneo: El operador ^ en C y C++ no es potencia. Es el operador a nivel de bit XOR. No hay un operador potencia para tipos básicos.
|
|
|
En línea
|
|
|
|
user-marcos
Desconectado
Mensajes: 159
|
Puedes usar: #include <cmath> int num = pow(x,y);
|
|
|
En línea
|
|
|
|
sora_ori
Desconectado
Mensajes: 269
|
Gracias a todos por vuestra respuestas! He conseguido terminarlo pero creo que no como me pide el ejercicio. #include<stdio.h> #include<conio.h> /* Declaración de funciones */ int potencia(int, int); int main(void){ int base, exponente; printf("\nLa pontencia del numero %i con exponente %i es %i", base , exponente , potencia (base , exponente )); return 0; } int potencia(int base, int exponente){ if (exponente == 0) return 1; else{ return base * potencia(base, exponente -1); // llamada recursiva } }
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
funcion(x,n): 1 si n = 0 x si n = 1 (x^(n/2))^2 si n es par, n>1 x*(x^((n-1)/2))^2 si n es impar, n>2 Puedes hacerlo como dice el ejercicio. en vez de K^2, puedes poner K*K, y las demás potencias, las haces recursivamente. Try it.
|
|
|
En línea
|
|
|
|
sora_ori
Desconectado
Mensajes: 269
|
Gracias ivancea, pero no te he entendido, es decir, yo lo he conseguido hacer haciendo base * potencia(base, exponente -1) y en el ejercicio me lo pide de otras formas.
Saludos
|
|
|
En línea
|
|
|
|
Regexp
Desconectado
Mensajes: 22
|
Gracias ivancea, pero no te he entendido, es decir, yo lo he conseguido hacer haciendo base * potencia(base, exponente -1) y en el ejercicio me lo pide de otras formas.
Saludos
Hola sora_ori, creo el ejercicio se basa en manejar bien los operadores aritméticos y las llamadas a funciones. Haciendo un poco al aire el asunto, creo que sería así // [...] declaracion de funcion, main, prototipo, etc. // [...] funcion potencia(x, n) // n de tipo entero // [...] Los condicionales basicos que ya hiciste, 1 si n=0 o x si n=1 // dejo el caso si n es par: (x^(n/2))^2 if ( n%2 == 0 ) return exponencial( exponencial(x, n/2), 2 ); // es decir, la base de la primera exponencial es una exponencial // aca iría el caso si n no es par // [...] fin de la función
Ya tienes una parte, falta que, basándote en el ejemplo que te dí, termines el ejercicio. edit el ejercicio propone hacer una función recursiva para exponencial (entero), que se llame menos veces a sí misma. Saludos
|
|
« Última modificación: 9 Junio 2015, 00:27 am por Regexp »
|
En línea
|
No todo el que deambula está perdido
|
|
|
sora_ori
Desconectado
Mensajes: 269
|
Muchas gracias Regexp,
Esto es lo que he entendido:
if (exponente%2 == 0 ){ return potencia( potencia(base, exponente/2),2); }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
recursividad potencia
Ejercicios
|
Choclito
|
2
|
6,591
|
18 Octubre 2009, 17:46 pm
por esp@
|
|
|
calcular potencia en java?
« 1 2 »
Java
|
cracken422
|
10
|
90,095
|
11 Julio 2012, 00:24 am
por cracken422
|
|
|
Calcular potencia de los binarios
Unix/Unix-Like
|
xv0
|
0
|
2,656
|
28 Enero 2013, 11:50 am
por xv0
|
|
|
programa en c++ calcular potencia
Programación C/C++
|
eduluis
|
4
|
7,126
|
26 Marzo 2013, 23:57 pm
por Puntoinfinito
|
|
|
(Ayuda) Calcular potencia de base x y exponente n
.NET (C#, VB.NET, ASP)
|
stealkiller06
|
5
|
4,948
|
3 Noviembre 2015, 20:12 pm
por Lekim
|
|