# HG changeset patch # User Eugen Sawin # Date 1299335235 -3600 # Node ID 3789f490c8f38aee30988710f5156e5c056d62b3 # Parent e088ae08440c587304ae602ea2d4d5c6e178cada Added (DP) Fibonacci example. diff -r e088ae08440c -r 3789f490c8f3 examples/fib.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/fib.py Sat Mar 05 15:27:15 2011 +0100 @@ -0,0 +1,40 @@ +""" +Name: fib - Fibonacci number machine +Description: Recursive and DP-based calculation of Fibonacci numbers. + +Author: Eugen Sawin +""" + +def main(): + args = parse_args() + if args.d: + fun = fib_dynamic + else: + fun = fib + print fun(args.n) + +def fib(n): + if n > 1: + return fib(n-1) + fib(n-2) + else: + return n + +def fib_dynamic(n): + f = (0, 1) + for i in xrange(2, n + 1): + f = (f[1], sum(f)) + if n < 1: + return n + else: + return f[1] + +from argparse import ArgumentParser + +def parse_args(): + parser = ArgumentParser(description='Returns the Fibonacci number for a given number n.') + parser.add_argument('n', type=int, help='Fib(n)') + parser.add_argument('-d', action='store_true', help='dynamic programming') + return parser.parse_args() + +if __name__ == "__main__": + main()