Advertisement
MingLLuo

Untitled

May 24th, 2024
544
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.70 KB | None | 0 0
  1. (* f(0) = 0
  2.      f(1) = 1
  3.      f(2n) = n
  4.      f(2n + 1) = f(n) + f(n + 1)
  5.     --------------------------------
  6.  
  7.     a * f(2n) + b * f(2n + 1) = (a + b) * f(n) + b * f(n + 1)
  8.     let F(x, y, z) = x * f(z) + y * f(z + 1)
  9.     then
  10.      F(a, b, 2n) = F(a+b, b, n)
  11.  
  12.     if z is even
  13.      then F(x, y, z) = F(x + y, y, z / 2)
  14.    else
  15.      F(x, y, z) = x * f(z) + y * f(z + 1) = x * (f( (z - 1) / 2 ) + f( (z + 1) / 2)) + y * f( (z + 1) / 2)
  16.        = x * f((z-1)/2) + (x + y) * f((z-1)/2 + 1)
  17.        = F(x, x + y, (z - 1) / 2)
  18. *)
  19.  
  20. let fusc (n : int) : int =
  21.   let rec f x y z =
  22.     if z == 0 then y
  23.     else if z mod 2 = 0 then f (x + y) y (z / 2)
  24.     else f x (x + y) ((z - 1) / 2)
  25.   in
  26.   f 1 0 n
  27.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement