Verdad que es imposible el algoritmo numero primo sin usar ciclos, ni funciones.

Iniciado por Aikanáro Anário, 23 Julio 2011, 19:15 PM

0 Miembros y 1 Visitante están viendo este tema.

Aikanáro Anário

Ya para mi era imposible sin ciclos, pero alguien me explicó que con las funciones recursivas sí se puede.

El caso es que debería de hacerlo solo con decisiones.
Lo que faltaba en internet: http://binar10s.blogspot.com/

$Edu$

Al usar funciones recursivas no estas usando funciones? xD

Hablas del algoritmo de saber si es primo o no, o de mostrar los numeros primos hasta n numero?


Aikanáro Anário

Cita de: $Edu$ en 23 Julio 2011, 19:25 PM
Al usar funciones recursivas no estas usando funciones? xD

Hablas del algoritmo de saber si es primo o no, o de mostrar los numeros primos hasta n numero?

Es que dado un numero, diga si es primo o no.

Yo diría que una función recursiva no es en sí un ciclo, o sea porque no es un for, ni un while, ni un do...while, pero sí es un ciclo, o sea sí, pero no.

El caso es que creo no se puede hacer un algoritmo así, solo con decisiones, o si se puede hacer, pero solo hasta determinado número.
Lo que faltaba en internet: http://binar10s.blogspot.com/

pucheto

Ya lo dije, podes escribir cualquier ciclo, como una funcion recursiva, y cualquier funcion recursiva, como un ciclo. Y se puede demostrar y es facil de demostrar.

Khronos14

Aikanáro Anário, cuando el código se traduce a ensamblador todos los bucles/ciclos se convierten en saltos (tipo goto). Así que técnicamente una función recursiva es un bucle.

Saludos.

ukol

Cita de: Khronos14 en 24 Julio 2011, 02:02 AM
Aikanáro Anário, cuando el código se traduce a ensamblador todos los bucles/ciclos se convierten en saltos (tipo goto). Así que técnicamente una función recursiva es un bucle.
Cita de: pucheto en 23 Julio 2011, 21:28 PM
Los ciclos y la recursion son equivalentes.
Cita de: pucheto en 24 Julio 2011, 01:35 AM
Ya lo dije, podes escribir cualquier ciclo, como una funcion recursiva, y cualquier funcion recursiva, como un ciclo. Y se puede demostrar y es facil de demostrar.

No creo que esto sea así, más bien diría que todo ciclo puede hacerse con recursión  pero no al revés. A no ser que uses estructuras de datos recursivas como una pila.

De hecho si eso fuera cierto podría utilizarse CTO(Call tail optimization) siempre, que es covertir una llamada recursiva en un salto goto, o sea un ciclo. O sea que interesaría convertir toda llamada recursiva en un ciclo ya que este no consume espacio en pila y es más eficiente.

Cita de: Aikanáro Anário en 24 Julio 2011, 01:13 AM
Es que dado un numero, diga si es primo o no.

Yo diría que una función recursiva no es en sí un ciclo, o sea porque no es un for, ni un while, ni un do...while, pero sí es un ciclo, o sea sí, pero no.

El caso es que creo no se puede hacer un algoritmo así, solo con decisiones, o si se puede hacer, pero solo hasta determinado número.

Utiliza una función que diga si un numero es divisible por alguno de los anteriores a otro numero,

divisible(x, num) = mod(x,num) == 0 || divisible(x, num-1)
primo(x) = no(divisible(x,x-1))

Dejo como ejercicio la condición de parada

[Case]

Cita de: ukol en 24 Julio 2011, 21:54 PM
No creo que esto sea así, más bien diría que todo ciclo puede hacerse con recursión  pero no al revés. A no ser que uses estructuras de datos recursivas como una pila.

De hecho si eso fuera cierto podría utilizarse CTO(Call tail optimization) siempre, que es covertir una llamada recursiva en un salto goto, o sea un ciclo. O sea que interesaría convertir toda llamada recursiva en un ciclo ya que este no consume espacio en pila y es más eficiente.

Si es asi, es algo que esta demostrado, toda recursion se puede pasar a un ciclo, y todo ciclo se puede pasar a una recursion.

ukol

Cita de: emilianork en 24 Julio 2011, 21:57 PM
Si es asi, es algo que esta demostrado, toda recursion se puede pasar a un ciclo, y todo ciclo se puede pasar a una recursion.
Por favor citad las fuentes, para lo de la demostración.

pucheto

Cita de: ukol en 24 Julio 2011, 21:54 PM
No creo que esto sea así, más bien diría que todo ciclo puede hacerse con recursión  pero no al revés. A no ser que uses estructuras de datos recursivas como una pila.
Ahi te respondiste a vos mismo, usando una pila y listo.