Duda general

Duda general

de Ines Beatriz Lorenzo Soumastre -
Número de respuestas: 5

Buenas, me surgió una duda haciendo la tarea. Ya lo resolví pero no sé qué es lo que estoy haciendo mal. Tengo la siguiente función:

Int funcion (variable1, variable2) { 
   if (condicion 0) {
       resultado valor 0; 
   }
   else {
       Int A= funcion(variable1, variable2)
       Int B= funcion(variable1, variable2)
 
       if (condicion 1)) {
           ...
           resultado=valor1;
       }
       else if (condicion 2) {
           resultado= valor2;
       }
       else if (condicion 3){
          resultado= valor 3;
       }
       else {
           resultado= valor 4;
       }
   }
   return resultado;
}

Al hacer esto no me retorna nada. En cambio cuando agrego el return dentro de cada if ahí sí me devuelve el resultado. Lo que hago es:

Int funcion (variable1, variable2) { 
   if (condicion 0) {
       return valor 0; 
   }
   else {
       Int A= funcion(variable1, variable2)
       Int B= funcion(variable1, variable2)
 
       if (condicion 1)) {
           ...
           return=valor1;
       }
       else if (condicion 2) {
           return= valor2;
       }
       else if (condicion 3){
          return= valor 3;
       }
       else {
           return= valor 4;
       }
   }
}
No encuentro que estén mal los paréntesis, podría estar haciendo algo mal en la función recursiva?
Si bien se soluciona poniendo los return adentro de cada condición, no entiendo por qué la otra opción está mal..
Saludos Inés!
En respuesta a Ines Beatriz Lorenzo Soumastre

Re: Duda general

de Matias Richart -

Hola Inés.

Vi que un compañero te respondió hace unos días en el foro de recursion.

Creo que el problema es el que él comenta. En el primer código, ¿donde estaría la definición de la variable resultado?

Saludos

En respuesta a Matias Richart

Re: Duda general

de Ines Beatriz Lorenzo Soumastre -

Si, vi la respuesta pero no me sacó la duda por eso la volví a hacer acá. En el primer código es: resultado=0. Me faltó el igual al reescribir en el foro. 

Saludos! 

En respuesta a Ines Beatriz Lorenzo Soumastre

Re: Duda general

de Matias Richart -

Hola Inés.

No veo en ningún lado que definas las variable. Ya sea como int resultado; o int resultado = 0;

Para que tu código funcione, tienes que "crear" la variable afuera de todos los if y else, por ejemplo hacer int resultado; antes de if (condicion 0) {

Saludos

En respuesta a Matias Richart

Re: Duda general

de Ines Beatriz Lorenzo Soumastre -

Buenas Matías,

Si es cierto, yo al hacer el seudocodigo lo transfomé porque es un ejercicio de la tarea y para poner la idea omití las definiciones de las variables que las hago en ambos casos al principio. Mi programa compila así que no creo que sea ese el error. Yo en el primer caso, le defino una variable resultado y luego devuelvo en el return esa variable, ahi supongamos que el resultado es un arbol, me devuelve el árbol vacío que es incorrecto. En el otro caso, hago varios returns dentro de cada if de la variable resultado, y para mi ambos códigos son análogos. Es el último el que, me devuelve correctamente la funcionalidad. Quizás es algo tonto como algún paréntesis del else o algo así, pero no me estoy dando cuenta y pese a que me salió quiero sacarme la duda.

El primer if es el paso base y las funciones que vienen después del  primer else son en realidad funciones recursivas, capaz que viene por ahi el tema. La verdad no sé.

En respuesta a Ines Beatriz Lorenzo Soumastre

Re: Duda general

de Matias Richart -
Estimada Inés.

Disculpas que quedó esta pregunta sin responder.
La verdad que con el pseudocódigo que mostrás no puedo ver donde puede estar el problema. Como bien decís, ambos códigos deberían tener el mismo comportamiento.

Saludos