#-------------------------------------------------------------------------------
#  Function5.py
#  recursion & compact conditional expressions
#-------------------------------------------------------------------------------

def factorial1(n):
   """returns product of numbers from 1 to n, iteratively"""
   p = 1
   for x in range(1, n+1):
      p *= x    # same as:  p = p*x
      # end for
   return p
# end of function fact()

def factorial2(n):
   """returns product of numbers from 1 to n, recursively"""
   if n>0:
      return n*factorial2(n-1)
   else:
      return 1 
   # end if-else
# end of function fact()

def abs(x):  # overwrites built-in abs()
   return (x if x>=0 else -x)
# end abs()

def sign(x):
   return ("positive" if x>0 else ("negative" if x<0 else "zero"))
# end sign()


# function main() -------------------------------------------------------------
def main():
   
   print()
   print(" {0:>3}{1:>25}{2:>25}".format('n', 'factorial1(n)', 'factorial2(n)'))
   print("-"*54)

   for n in range(1, 21):
      s = " {0:>3}{1:>25}{2:>25}".format(n, factorial1(n), factorial2(n))
      print(s)
   # end for

   print()
   print(abs(1.5), abs(-1.5))
   print(sign(1.5), sign(-1.5), sign(0.0))
   print()

# end main() ------------------------------------------------------------------


# closing conditional ---------------------------------------------------------
if __name__=='__main__':

   main()

# end
