Título: Ver si un vector es un monte Publicado por: pacman22 en 31 Octubre 2014, 04:12 am Tengo que hacer una función recursiva en c, para saber si un vector de tamaño n es un monte (siempre n siendo par)
Un vector es un monte, si hasta la mitad es creciente, y la otra mitad es decreciente. Lo pense dividiendo la lista en la mitad(M). Y recorrerla hasta M , preguntando si el elemento i <i+1 , entonces quedaria la recursion como monte(A[] ,i+1,m). Y la otra mitad , recorrerla dese tamaño hasta M,monte(A[],tam-1,m) , ya que usaria la misma pregunta logica tam<tam-1 . Pero ahi surge el problema, por la lista de la izquierda pregunto con i+1 y aca con tam-1 . Alguna ayudita? Gracias. Título: Re: Ver si un vector es un monte Publicado por: leosansan en 31 Octubre 2014, 12:49 pm ..................................................... Lo pense dividiendo la lista en la mitad(M). Y recorrerla hasta M , preguntando si el elemento i <i+1 , entonces quedaria la recursion como monte(A[] ,i+1,m). ..................................................... Creo que es liarla eso de dividir el array en dos partes. Yo invocaría a la función recursiva con algo como: Código
Y montaría la función recursiva para que diferencie entre la mitad izquierda y la derecha: EI: codigo borrado, no hagas tareas. (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Ver si un vector es un monte Publicado por: rir3760 en 31 Octubre 2014, 17:08 pm Tengo que hacer una función recursiva en c, para saber si un vector de tamaño n es un monte (siempre n siendo par) Como ya te comento leosansan la solución es mas sencilla.Un vector es un monte, si hasta la mitad es creciente, y la otra mitad es decreciente. Ya que tienes una lista "a" con un numero par de elementos si utilizamos "i" y "j" como indices para la parte izquierda y derecha (con valores iniciales primero y ultimo respectivamente) la condición limite (todos los elementos procesados formando un monte) es "i + 1 == j". Si esa condición no se da ello indica que faltan elementos por procesar y lo primero que se debe hacer es verificar que sean mayores: 1) El elemento siguiente de la parte izquierda: "a[ i ] < a[i + 1]". 2) El elemento anterior de la parte derecha: "a[j - 1] > a[ j ]". Si eso se da hasta el momento tienes un monte, la palabra final la tiene el proceso recursivo (la llamada a función) de los elementos "i + 1" y "j - 1". Tal vez suene complicado pero no lo es, la función termina como una sola sentencia con tres operadores y cuatro operandos, inténtalo tu solo, presenta los avances y te ayudamos con los problemas que resulten. Un saludo Título: Re: Ver si un vector es un monte Publicado por: leosansan en 31 Octubre 2014, 18:21 pm la condición limite (todos los elementos procesados formando un monte) es "i + 1 == j". .................................................... "Creo", si no me fallan las cuentas, que con la opción de "ó : i + 2 == j " cubrirías el caso de un numero impar de elementos. ¡¡¡¡ Saluditos! ..... !!!! (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Ver si un vector es un monte Publicado por: pacman22 en 3 Noviembre 2014, 10:48 am Que tal esto?
Código
|