Fast Fibonacci recursion

前端 未结 9 1685

I\'m trying to recall an algorithm on Fibonacci recursion. The following:

public int fibonacci(int n)  {
  if(n == 0)
    return 0;
  else if(n == 1)
    ret         


        
9条回答
  •  天命终不由人
    2020-12-07 23:51

    A good algorithm for fast fibonacci calculations is (in python):

    def fib2(n):
        # return (fib(n), fib(n-1))
        if n ==  0: return (0,  1)
        if n == -1: return (1, -1)
        k, r = divmod(n, 2) # n=2k+r
        u_k, u_km1 = fib2(k)
        u_k_s, u_km1_s = u_k**2, u_km1**2  # Can be improved by parallel calls
        u_2kp1 = 4 * u_k_s - u_km1_s + (-2 if k%2 else 2)
        u_2km1 = u_k_s + u_km1_s
        u_2k   = u_2kp1 - u_2km1
        return (u_2kp1, u_2k) if r else (u_2k, u_2km1)
    
    def fib(n):
        k, r = divmod(n, 2) # n=2k+r
        u_k, u_km1 = fib2(k)
        return (2*u_k+u_km1)*(2*u_k-u_km1)+(-2 if k%2 else 2) if r else u_k*(u_k+2*u_km1)
    

    If you need very fast computation, links to the libgmp and use mpz_fib_ui() or mpz_fib2_ui() functions.

提交回复
热议问题