Ver Mensaje Individual
  #117 (permalink)  
Antiguo 17/12/2014, 06:19
Avatar de leosansan
leosansan
 
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 11 años, 10 meses
Puntos: 49
Respuesta: Petando la pila. Problemas y retos usando recursividad.

Cita:
Iniciado por Pantaláimon Ver Mensaje
De todos modos quizá me estoy pasando de precavido. En una primera vista, con tu solución ya me quedaba satisfecho. La de kutcher y leosansan, no :p

Un saludo!

Corrigo. Ahora en la función imprimir se imprime sólo si ver!=0...otra cosa es que lo aproveche como exponente. Y es que si el exponente es cero sencillamente no es un factor primo y no se imprime:

Código C++:
Ver original
  1. #include<stdio.h>
  2.  
  3. int descompon ( int a , int b  , int ver ) ;
  4. int factorizar1 (  int i , int numero , int b , int ver ) ;
  5. void factorizar2 (  int i , int *n , int b , int ver  ) ;
  6. void imprimir( int i , int n, int b  , int ver ) ;
  7.  
  8. int main ( void ) {
  9.     int ver ;
  10.     return descompon ( 1500 , 1550,  ver ) , 0 ;
  11. }
  12.  
  13. int descompon ( int a , int b , int ver ) {
  14.   if ( a <= b ) {
  15.     printf( "%d = " , a ) ;
  16.     factorizar1 ( 2 , a ,  b  ,  ver ) ;
  17.     putchar ( '\n' );
  18.     return descompon (  a + 1 ,  b ,  ver ) ;
  19.   }
  20.   return 0 ;
  21. }
  22.  
  23. int factorizar1 (  int i , int numero , int b , int ver ) {
  24.   int n = numero ;
  25.   if ( i <= n ) {
  26.     factorizar2 ( i , &n  , b , ver ) ;
  27.     return factorizar1 ( i + 1  , n  ,  b  ,  ver ) ;
  28.   }
  29.   return 0 ;
  30. }
  31.  
  32. void factorizar2 (  int i , int *n , int b , int ver  ) {
  33.   while ( *n % i == 0 )
  34.     *n /=  i , ver++ ;
  35.   imprimir( i , *n , b , ver ) ;
  36. }
  37.  
  38. void imprimir( int i , int n, int b , int ver ) {
  39.   if ( ver != 0 ) {
  40.     if ( ver == 1 && i < n )
  41.       printf( "%d * " ,i ) ;
  42.     else if ( ver == 1 && i > n )
  43.       printf( "%d" ,i ) ;
  44.     else if ( ver > 1 && i < n )
  45.       printf( "%d^%d * " ,i , ver ) ;
  46.     else if ( ver > 1 && i > n )
  47.       printf( "%d^%d" ,i , ver )  ;
  48.   }
  49. }

¡¡¡Saluditos!!!