Acerca de:

Este blog contiene los códigos, ejemplos y bases de datos que he usado cuando aprendía acerca de algún tema específico. En lugar de borrarlos (una vez dominado ya el tema), he decidido publicarlos :)

sábado, 18 de abril de 2015

Calculando los números de la serie Fibonacci de forma recursiva en Python 2.7

Una función que calcule los números de Fibonacci es el ejemplo clásico para aprender recursividad:

def fibs(x):
    if x <= 1:
        return x
    return fibs(x - 1) + fibs(x - 2)



Lo malo de esta función es que calcula un número de la serie Fibonacci específico, no calcula toda la serie hasta una cantidad determinada.

La siguiente función sí devuelve la lista de los números de Fibonacci hasta la cantidad de elementos en la lista que se le indique:

def fibList (x, limit):
    if len(x) < 2:
        return fibList([1, 2], limit)

    if len(x) > limit:
        return x

    h = x[-1] + x[-2]
    x.append(h)
    return fibList(x, limit)


La forma de llamarla es:

x = fibList([], 10)

for c in x:
    print(c)



El primer parámetro puede ser una lista vacía o los primeros valores de la serie:

x = fibList([1, 2], 10)

En ambos casos el resultado es:




La lista tiene 11 valores en lugar de 10 debido a que primero inserta el elemento con la función append y después evalúa el tamaño de la lista.

3 comentarios:

Unknown dijo...

Hola que tal, te lo digo por aqui porque no he enconrado otra forma de contactar contigo.

He estado mirando tu ejemplo para crear una .dll y tuilizarla desde .net

Mi prgunta es ¿es posible crear una dll a partir de un codigo de un programa de consola en C++ ya hecho?

O sea, seria modificar el codigo de C++ para que en vez de un programa de consola, sea una dll y poder pasarle los argumentos desde .net y ver el resulado en un texbox.

Gracias y muy buen trabajo con el blog!

Y3linn4 dijo...

Hola Ivan

En sí, bastaría que crearas un proyecto de librería dinámica en Visual C++, importaras los archivos del proyecto de consola al nuevo proyecto de librería dinámica y reemplazaras la función main por la función de la librería que otras aplicaciones usarán. Nunca he intentado escribir en consola desde una dll y no sé si se puede. En este caso, sería mejor escribir los resultados en un archivo en disco o que las funciones de la dll los devuelvan como valores.
Saludos!

Unknown dijo...

Gracias.

El problema esta en que es un proyecto con 3 .cpp yy tres archivos de cabecera .h y todos los ejemplos que he visto por internet, son utilizando un solo .cpp y un solo archivo .h, asi que no se si hay que modificar ttodos los archivos del proyecto o que..

Mi lenguaje de programacion habitual es Vb.Net, asi que en C++ estoy bastante perdido..

Si pudieras echarme una mano te lo agradeceria enormemente..

Saludos.