viernes, 19 de agosto de 2011

[Code] Mini Reto Con un Amigo! Sucesión de Fibonacci

Bueno hace un tiempo nos retamos a quien hacia la funcion mas rapida para comprobar la Sucesión de fibonacci y bueno ahora pondre los codes de cada uno! ah por cierto algo de info de lo que hablamos Sucesión de Fibonacci..
Esta es De Mi amigo, Sub-Soul
Private Function IsFibonacciNumber(ByVal N As Long) As Boolean
        Dim X(2) As Long

        X(Chr(48)) = Chr(48)
        X(Chr(49)) = Chr(49)

        If X(Chr(50)) = X(Chr(48)) Or X(Chr(49)) Then IsFibonacciNumber = True
        If X(Chr(50)) <> N Then IsFibonacciNumber = False

        For X(Chr(50)) = Chr(48) To N

            X(Chr(50)) = X(Chr(48)) + X(Chr(49))
            X(Chr(48)) = X(Chr(49))
            X(Chr(49)) = X(Chr(50))

            If X(Chr(50)) = N Then IsFibonacciNumber = True : Exit For

            DoEvents()

        Next

    End Function
y esta funcion comprobando hasta el numero maximo de short en .NET 32.767 demora en comprobar 301 msec..

Y esta es mi funcion xD

Public Function EsFibonacci(ByVal viNum As Short) As Boolean
        Dim vdDoble(1) As Double

        Dim vbByt As Byte

        If Not viNum And &H7FFF Then 'solo hasta el mayor numero de short 32.767
            vdDoble(0) = 0

            vdDoble(1) = 1

            Do Until vdDoble(vbByt) >= viNum

                vdDoble(vbByt) = vdDoble(vbByt) + vdDoble(vbByt Xor 1)

                vbByt = vbByt Xor 1

            Loop

            If vdDoble(0) = viNum OrElse vdDoble(1) = viNum Then

                Return True

            End If
        End If
    End Function

Y esta funcion comprobada de la misma solo tarda 300 msec...lo hice de esta forma puesto a que en clases vimos compuertas logicas y me sirvio para usar bit nada mas...xor and y or como pueden ver xD :P esto es todo
Imprimir

No hay comentarios:

Publicar un comentario