|
@ -0,0 +1,49 @@ |
|
|
|
|
|
def fib(n): |
|
|
|
|
|
if n == 0 or n == 1: |
|
|
|
|
|
return n |
|
|
|
|
|
return fib(n-1) + fib(n-2) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def fibHelper(n, a, b): |
|
|
|
|
|
if n == 0: |
|
|
|
|
|
return a |
|
|
|
|
|
elif n == 1: |
|
|
|
|
|
return b |
|
|
|
|
|
return fibHelper(n-1, b, a+b) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def fibIterative(n): |
|
|
|
|
|
return fibHelper(n, 0, 1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def multiply(a,b): |
|
|
|
|
|
product = [0,0,0] |
|
|
|
|
|
product[0] = a[0]*b[0] + a[1]*b[1] |
|
|
|
|
|
product[1] = a[0]*b[1] + a[1]*b[2] |
|
|
|
|
|
product[2] = a[1]*b[1] + a[2]*b[2] |
|
|
|
|
|
return product |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def power(l, k): |
|
|
|
|
|
if k == 1: |
|
|
|
|
|
return l |
|
|
|
|
|
temp = power(l, k//2) |
|
|
|
|
|
if k%2 == 0: |
|
|
|
|
|
return multiply(temp, temp) |
|
|
|
|
|
else: |
|
|
|
|
|
return multiply(l, multiply(temp, temp)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def fibPower(n): |
|
|
|
|
|
l = [1,1,0] |
|
|
|
|
|
return power(l, n)[1] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
""" |
|
|
|
|
|
Makes sure that other programs don't execute the main |
|
|
|
|
|
""" |
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
|
|
try: |
|
|
|
|
|
print(fib(30)) |
|
|
|
|
|
except KeyboardInterrupt: |
|
|
|
|
|
exit() |