author | Eugen Sawin <sawine@me73.com> |
Tue, 08 Mar 2011 21:45:25 +0100 | |
changeset 15 | c0bb7625b557 |
permissions | -rw-r--r-- |
sawine@10 | 1 |
""" |
sawine@10 | 2 |
Name: fib - Fibonacci number machine |
sawine@10 | 3 |
Description: Recursive and DP-based calculation of Fibonacci numbers. |
sawine@10 | 4 |
|
sawine@10 | 5 |
Author: Eugen Sawin <sawine@me73.com> |
sawine@10 | 6 |
""" |
sawine@10 | 7 |
|
sawine@10 | 8 |
def main(): |
sawine@10 | 9 |
args = parse_args() |
sawine@10 | 10 |
if args.d: |
sawine@10 | 11 |
fun = fib_dynamic |
sawine@10 | 12 |
else: |
sawine@10 | 13 |
fun = fib |
sawine@10 | 14 |
print fun(args.n) |
sawine@10 | 15 |
|
sawine@10 | 16 |
def fib(n): |
sawine@10 | 17 |
if n > 1: |
sawine@10 | 18 |
return fib(n-1) + fib(n-2) |
sawine@10 | 19 |
else: |
sawine@10 | 20 |
return n |
sawine@10 | 21 |
|
sawine@10 | 22 |
def fib_dynamic(n): |
sawine@10 | 23 |
f = (0, 1) |
sawine@10 | 24 |
for i in xrange(2, n + 1): |
sawine@10 | 25 |
f = (f[1], sum(f)) |
sawine@10 | 26 |
if n < 1: |
sawine@10 | 27 |
return n |
sawine@10 | 28 |
else: |
sawine@10 | 29 |
return f[1] |
sawine@10 | 30 |
|
sawine@10 | 31 |
from argparse import ArgumentParser |
sawine@10 | 32 |
|
sawine@10 | 33 |
def parse_args(): |
sawine@10 | 34 |
parser = ArgumentParser(description='Returns the Fibonacci number for a given number n.') |
sawine@10 | 35 |
parser.add_argument('n', type=int, help='Fib(n)') |
sawine@10 | 36 |
parser.add_argument('-d', action='store_true', help='dynamic programming') |
sawine@10 | 37 |
return parser.parse_args() |
sawine@10 | 38 |
|
sawine@10 | 39 |
if __name__ == "__main__": |
sawine@10 | 40 |
main() |