#------------------------------------------------------------------------------
#  Fibonacci3.py
#  Use a dictionary to save values already known.
#------------------------------------------------------------------------------

known = {0:0, 1:1} # a global variable

def fib(n):
   if n not in known:
      val = fib(n-1) + fib(n-2)
      known[n] = val
   # end if
   return known[n]
# end fib()


# function main() -------------------------------------------------------------
def main():

   # print(fib(100))
   print(fib(500))
   #print(fib(998))
   #print(fib(999)) # finally too big

# end main()

# closing conditional ---------------------------------------------------------
if __name__=='__main__':

   main()

# end