Ver Mensaje Individual
  #87 (permalink)  
Antiguo 05/12/2014, 03:04
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Petando la pila. Problemas y retos usando recursividad.

el return está en el último else, si el código entra en, por ejemplo, el primer if, se llama de forma recursiva a DigitosNumero... pero únicamente el último tendrá el return, el resto de llamadas no tendrán escrito su correspondiente return.

Yo esperaría encontrar algo así:

Código C:
Ver original
  1. int DigitosNumero ( int digitosNumero [ 10 ], int numero , int flag ) {
  2.   if ( numero > 0 && flag == 0 )
  3.     return digitosNumero [ numero % 10 ]++ , DigitosNumero ( digitosNumero , numero / 10 , 0 ) ;
  4.   else if ( numero > 0 && flag == 1 )
  5.     return digitosNumero [ numero % 10 ]-- , DigitosNumero ( digitosNumero , numero / 10 , 1 ) ;
  6.   else return 1 ;
  7. }

o así:

Código C:
Ver original
  1. int DigitosNumero ( int digitosNumero [ 10 ], int numero , int flag ) {
  2.   int to_return = 1;
  3.   if ( numero > 0 && flag == 0 )
  4.     digitosNumero [ numero % 10 ]++ , to_return = DigitosNumero ( digitosNumero , numero / 10 , 0 ) ;
  5.   else if ( numero > 0 && flag == 1 )
  6.     digitosNumero [ numero % 10 ]-- , to_return = DigitosNumero ( digitosNumero , numero / 10 , 1 ) ;
  7.   return to_return;
  8. }

Aun así no termino de acostumbrarme a eso de separar las instrucciones por coma en vez de por punto y coma... manías que tiene uno :)