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