Determinar si un numero de dos digitos pertenece a la serie fibonacci

publicado por: Anonymous

Necesito determinar si un número de dos dígitos pertenece a la serie fibonacci, tengo el siguiente código:

'''Leer un número de dos dígitos y determinar si pertenece a la serie de Fibonacci. Con ciclos.'''

numero1 = int(raw_input("Digite un numero de dos digitos: "))

if numero1 > 9 and numero1 <=99:

    inicial = 0
    numero = 1
    ultimo = 0
    penultimo = 0

    while numero1 <= 100:
        penultimo = ultimo
        ultimo = numero
        numero = penultimo + ultimo 

    if numero1 == ultimo:
        print "Si pertenece a las serie Fibonacci."


    else:
        print "El numero no pertenece a la serie Fibonacci."

else:
    print "Debe ingresar un numero de dos digitos"

Pero no consigo que me muestre lo que necesito, simplemente no imprime nada.

solución

Los problemas están en el ciclo while, esta parte de tu programa es la que realmente se encarga de obtener los valores de la sucesión de Fibonacci de forma iterativa.

El primer problema viene en la línea while numero1 <= 100. numero1 es el numero procedente del input y jamás se modifica en el ciclo. Como numero1 siempre es menor de 100 por el if previo, numero1 <= 100 es siempre cierto y tenemos un ciclo infinito siempre. Como en cada iteración del ciclo obtenemos un item de la sucesión y quieres saber si numero1 es parte de la misma, el condicional debe ser:

while ultimo < numero1:

dónde ultimo es el ultimo item de la sucesión calculado en la ultima iteración. Esto causa que el ciclo termine si el último item de la sucesión calculado es igual (numero1 pertenece a la sucesión) o mayor (numero1 no pertenece a a la sucesión).

Por otro lado, te has complicado en el cálculo de cada item de la serie, solo necesitas dos variables, una que almacene el penúltimo item de la sucesión y otro el último calculado. En cada iteración, el nuevo item es la suma de estos dos valores anteriores y el penúltimo pasa a sel el antiguo último valor calculado:

temporal = penultimo
penultimo = ultimo
ultimo = penultimo + ultimo

En Python no necesitas la variable temporal, puedes hacer simplemente:

penultimo, ultimo = ultimo, penultimo + ultimo 

El código puede quedar así:

numero1 = int(raw_input("Digite un numero de dos digitos: "))

if 9 < numero1 <= 99:
    penultimo = 0
    ultimo = 1

    while ultimo < numero1:
        penultimo, ultimo = ultimo, penultimo + ultimo

    if numero1 == ultimo:
        print "Si pertenece a las serie Fibonacci."

    else:
        print "El numero no pertenece a la serie Fibonacci."

else:
    print "Debe ingresar un numero de dos digitos"
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *