examples/fib.py
author Eugen Sawin <sawine@me73.com>
Tue, 08 Mar 2011 21:45:25 +0100
changeset 15 c0bb7625b557
permissions -rw-r--r--
Merged.
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()