1    # ok, takze dneska jsme zacali "pisemkou". Priklad je jasnej... nesmite pouzit
   2    # nasobeni (*) ale mate udelat funkci co vynasobi dve cisla.
   3    # takze agrumenty budou ty 2 cisla...
   4    # a navratova hodnota bude vysledek. A zase si ukazeme nekolik moznosti
   5    
   6    def nasobeni1(x,y):
   7      """ Prvni nasobeni, nejjednoduzsi a nejmin efektivni. """
   8      r=0 # sem budeme postupne nascitavat vysledek
   9      i=0 # rika kolikrat jsme uz y pricetli k vysledku (= r=i*y)
  10      while (i!=x): # dokud i neni stejny jako x, pricitame
  11        r=r+y # pricitame do vysledku
  12        i=i+1 # inkrementace, pricetli jsme dalsi y
  13      return r
  14    
  15    # a ted bez i, vychazime z toho ze hodnotu x vlastne nepotrebujeme,
  16    # takze vzdycky kdyz pricteme y, x snizime o jednicku a az bude x nula, tak jsme
  17    # hotovi...
  18    
  19    def nasobeni2(x,y):
  20      """ Uz trosku lepsi. """
  21      r=0 # porad si nekam musime ukladat vysledek
  22      while (x>0): # dokud neni x nula (tedy dokud jeste bychom meli pricist nejaky y)
  23        r=r+y
  24        x=x-1
  25      return r
  26    
  27    # a ted hardcore forever... rekurze, tedy volani funkce sebou samotnou.
  28    # kdyz delate rekurzi, vzdycky nejdriv myslete na to, kdy se ukonci, tedy pro jaky
  29    # hodnoty argumentu znate hned trivialne vysledek
  30    # a pak premejslejte... Kdyz nekdo by vam rekl reseni nejakyho mensiho problemu,
  31    # umite z toho slozit reseni toho vetsiho?
  32    
  33    def nasobeniR(x,y):
  34      """ Rekurzivni nasoveni dvou cisel. """
  35      if (x==1):
  36        return y # trivialne, kdyz x je 1, pak 1*y=y vzdycky
  37      # jinak, kdyz nam nekdo rekne kolik je (x-1)*y, tak vime ze tihle +y je x*y
  38      # a kdo nam rekne kolik je (x-1)*y? my sami prece
  39      return y+nasobeniR(x-1,y)
  40