elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Calcular potencia con recursividad
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Calcular potencia con recursividad  (Leído 11,853 veces)
sora_ori

Desconectado Desconectado

Mensajes: 269



Ver Perfil
Calcular potencia con recursividad
« en: 8 Junio 2015, 21:00 pm »

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  :rolleyes: :rolleyes:

Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3.  
  4. /* Declaración de funciones */
  5. int potencia (int);
  6.  
  7. int main(void){
  8. int n;
  9.  
  10. printf("Esribe un numero para calcular su potencia: ");
  11. scanf("%i", &n);
  12.  
  13. printf("\nLa pontencia del numero %i es %i", n, potencia(n));
  14.  
  15. getch();
  16. return 0;
  17. }
  18.  
  19. int potencia(n){
  20.  
  21. if (n == 0) return 0;
  22.  
  23. if (n == 1) return 1;
  24.  
  25. if (n % 2 == 0){
  26. (x^(n/2))^2
  27. }
  28. else{
  29. x*(x^((n-1)/2))^2
  30. }
  31.  
  32.  
  33. }


En línea

Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: Calcular potencia con recursividad
« Respuesta #1 en: 8 Junio 2015, 21:32 pm »

Sin mirar mucho hay dos cosas que claramente están mal
Citar
1 si n = 0
Citar
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 Desconectado

Mensajes: 269



Ver Perfil
Re: Calcular potencia con recursividad
« Respuesta #2 en: 8 Junio 2015, 21:47 pm »

Gracias Stakewinner, lo voy entendiendo solo que al ver esa formula se me esta complicando.

Entonces ahora me quedaría así:

Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3.  
  4. /* Declaración de funciones */
  5. int potencia (int);
  6.  
  7. int main(void){
  8. int n;
  9.  
  10. printf("Esribe un numero para calcular su potencia: ");
  11. scanf("%i", &n);
  12.  
  13. printf("\nLa pontencia del numero %i es %i", n, potencia(n));
  14.  
  15. getch();
  16. return 0;
  17. }
  18.  
  19. int potencia(n){
  20.  
  21. if (n == 0) return 1;
  22.  
  23. if (n == 1) return 0;
  24.  
  25. if (n % 2 == 0){
  26. (potencia^(n/2))^2
  27. }
  28. else{
  29. potencia*(potencia^((n-1)/2))^2
  30. }
  31.  
  32. }
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Calcular potencia con recursividad
« Respuesta #3 en: 8 Junio 2015, 22:18 pm »

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 Desconectado

Mensajes: 159


Ver Perfil
Re: Calcular potencia con recursividad
« Respuesta #4 en: 8 Junio 2015, 22:41 pm »

Puedes usar:
Código
  1. #include <cmath>
  2. int num = pow(x,y);
  3.  
En línea

sora_ori

Desconectado Desconectado

Mensajes: 269



Ver Perfil
Re: Calcular potencia con recursividad
« Respuesta #5 en: 8 Junio 2015, 23:05 pm »

Gracias a todos por vuestra respuestas!

He conseguido terminarlo pero creo que no como me pide el ejercicio.

Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3.  
  4. /* Declaración de funciones */
  5. int potencia(int, int);
  6.  
  7. int main(void){
  8. int base, exponente;
  9.  
  10. printf("Base: ");
  11. fflush(stdin);
  12. scanf("%i", &base);
  13.  
  14. printf("Exponente: ");
  15. fflush(stdin);
  16. scanf("%i", &exponente);
  17.  
  18. printf("\nLa pontencia del numero %i con exponente %i es %i", base, exponente, potencia(base, exponente));
  19.  
  20. getch();
  21. return 0;
  22. }
  23.  
  24. int potencia(int base, int exponente){
  25. if (exponente  == 0) return 1;
  26.  
  27. else{
  28. return base * potencia(base, exponente -1); // llamada recursiva
  29. }
  30. }
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Calcular potencia con recursividad
« Respuesta #6 en: 8 Junio 2015, 23:25 pm »

Código:
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 Desconectado

Mensajes: 269



Ver Perfil
Re: Calcular potencia con recursividad
« Respuesta #7 en: 8 Junio 2015, 23:38 pm »

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 Desconectado

Mensajes: 22



Ver Perfil
Re: Calcular potencia con recursividad
« Respuesta #8 en: 8 Junio 2015, 23:56 pm »

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í

Código
  1. // [...] declaracion de funcion, main, prototipo, etc.
  2. // [...] funcion potencia(x, n)
  3. // n de tipo entero
  4.  
  5. // [...] Los condicionales basicos que ya hiciste, 1 si n=0 o x si n=1
  6.  
  7. // dejo el caso si n es par: (x^(n/2))^2
  8. if ( n%2 == 0 ) return exponencial( exponencial(x, n/2), 2 );
  9. // es decir, la base de la primera exponencial es una exponencial
  10.  
  11. // aca iría el caso si n no es par
  12.  
  13. // [...] fin de la función
  14.  
  15.  

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 Desconectado

Mensajes: 269



Ver Perfil
Re: Calcular potencia con recursividad
« Respuesta #9 en: 9 Junio 2015, 00:07 am »

Muchas gracias Regexp,

Esto es lo que he entendido:

if (exponente%2  == 0 ){
      return potencia( potencia(base, exponente/2),2);
   }
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
recursividad potencia
Ejercicios
Choclito 2 6,576 Último mensaje 18 Octubre 2009, 17:46 pm
por esp@
calcular potencia en java? « 1 2 »
Java
cracken422 10 90,022 Último mensaje 11 Julio 2012, 00:24 am
por cracken422
Calcular potencia de los binarios
Unix/Unix-Like
xv0 0 2,637 Último mensaje 28 Enero 2013, 11:50 am
por xv0
programa en c++ calcular potencia
Programación C/C++
eduluis 4 7,093 Último mensaje 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,923 Último mensaje 3 Noviembre 2015, 20:12 pm
por Lekim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines