Ejercicio Recursivo
Publicado: 7 Marzo, 2010 - 18:30 Ejercicio Recursivo
Hace tiempo habia visto este ejercicio interesante:
El cuadrado de un número N puede calcularse con la suma de los N primeros números impares. Escriba un algoritmo recursivo para obtener el cuadrado de un entero positivo N basándose en esta propiedad.
Nota: Tenga en cuenta que el n-ésimo número impar se puede obtener como 2 * n - 1.
n = 3 | n-ésimo = 2 * 3 - 1 = 5 | n al cuadrado = 1 + 3 + 5 = 9
n = 4 | n-ésimo = 2 * 4 - 1 = 7 | n al cuadrado = 1 + 3 + 5 + 7 = 16
int cuadrado_impar(N)
{
if((2 * N - 1) == 1)
return(1);
else
N+=cuadrado_impar(2 * N - 1);
return(N);
}
Estará bién está solución?
- Inicie sesión o regístrese para enviar comentarios
- 906 lecturas


Hace tiempo habia visto este ejercicio interesante:
El cuadrado de un número N puede calcularse con la suma de los N primeros números impares. Escriba un algoritmo recursivo para obtener el cuadrado de un entero positivo N basándose en esta propiedad.
Nota: Tenga en cuenta que el n-ésimo número impar se puede obtener como 2 * n - 1.
n = 3 | n-ésimo = 2 * 3 - 1 = 5 | n al cuadrado = 1 + 3 + 5 = 9
n = 4 | n-ésimo = 2 * 4 - 1 = 7 | n al cuadrado = 1 + 3 + 5 + 7 = 16
int cuadrado_impar(N)
{
if((2 * N - 1) == 1)
return(1);
else
N+=cuadrado_impar(2 * N - 1);
return(N);
}
Estará bién está solución?
Tengo que volver a repasar lógica o esto no debería funcionar...
Tienes una funcion entera llamada cuadrado_impar que recibe como parámetro el número N.
Bajo el supuesto de N=3, se compara 5 con 1 (2*3-1=5) que es falso, pasando al else.
En el else sumas a N (3) el resultado de la llamada a la función cuadrado_impar(5)
Bajo el supuesto de 5, se compara 9 con 1 (2*5-1=9) que es falso, pasando al else.
En el else sumas a N (5) el resultado de la llamada a la función cuadrado_impar(9)
Bajo el supuesto de 9, se compara 17 con 1 (2*9-1=17) que es falso, pasando al else...
Esto funciona así?
int f(n){if(n==1)
return 1;
else
return 2*n-1 + f(n-1);
}
Una propiedad muy interesante :)
int f(n){if(n==1)
return 1;
else
return 2*n-1 + f(n-1);
}
Una propiedad muy interesante :)
Eso está mucho mejor. :)
Gracias m__x_ por el detalle que faltaba, estaba casi cerca!
Se me pasó lo de decrementar la N... Saludos!
Gracias m__x_ por el detalle que faltaba, estaba casi cerca!
Se me pasó lo de decrementar la N... Saludos!
estabas pensando mal la funcion, vos cada vez que llamabas recursivamente a la función, la llamabas con
funcion(2*n-1){...}
entonces cada llamado, la función obtenía un parámetro mas grande y nunca iba a llegar el caso degenerado ( donde n = 1 ) que es el que detiene la recursión, tenes que tener en cuenta como se modifica el parámetro cada vez que se llama a la funcion para que esta pueda en algún momento terminar. y no entre en un bucle infinito.