Search
Při rekurzivním volání volá funkce samu sebe. Aby nedošlo k nekonečné smyčce, musí toho volání obsahovat ukončovací podmínku. Obecně lze rekurzi zapsat
def funkce(promenna): if (ukoncovaci podminka): funkce(zmenena_promenna)
Pomocí rekurze můžeme například implementovat for cyklus:
def recursivePrint(index, array): if (index < len(array) ): print(array[index], end=' ' ); recursivePrint(index+1, array) print(array[index], end=' ' ); a = [] for i in range(10): a.append(i*i) print("List je",a) recursivePrint(0, a);
a=[1, 2, [3, [4, 5], 6, [7]], [8, 9], 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
if type(x) is list:
binomial(k,n)
Napište rekurzivní výpočet Fibonacciho posloupnosti. Pro tuto posloupnost platí:
Předchozí řešení je pomalé pro výpočet větších $n$. Důvodem je, že při rekurzivním volání dochází často k opakovanému výpočtu stejných členů posloupnosti.
Řešením je zapamatovat si již vypočítané hodnoty a ty použít:
fib(n)
hint[]
Napište funkci fibFast(n) pro zrychlený výpočet Fibonacciho posloupnosti
fibFast(n)
hint
Máme tři věže (označme je $A$,$B$ a $C$), na kterých je rozmístěno $n$ disků o různých velikostech. Vždy platí, že menší disk smí být položen na větší disk, ne naopak. Na začátku je všech n disků na věži $A$, přičemž jsou seřazeny podle velikosti (největší leží dole, nejmenší nahoře). Cílem je přemístit disky tak, aby všechny ležely na věži $C$.
Uvažujme hrací karty .
int
string
[1,“1”], [2,“A”], [0,“K”]
Napište funkci, který vzestupně třídí karty podle jejich barvy a podle jejich hodnoty.
cards = [ [3,"A"], [3,"Q"], [0,"2"], [1,"10"] ]
výsledek pro setřídění:
[ [0, "2"], [1, "10"], [3, "Q"], [3, "A"] ]
Seřaďte toto pole:
cards = [[0, 'Q'], [2, '10'], [1, 'K'], [1, '8'], [2, '10'], [2, '4'], [3, '4'], [0, '4'], [1, '3'], [2, '5'], [0, 'K'], [3, '4'], [1, 'J'], [0, '3'], [0, '9']]
Napište funkci, která vypíše expanzi polynomu $(x+y)^n$.
$ \det \mathbf {A} =\sum _{j=1}^{n}\ {a}_{ij}{C}_{ij}$ kde $ {C}_{ij}$ jsou kofaktory, tedy $ {C}_{ij}$ je $ (-1)^{i+j}$ krát determinant matice, která vznikne z A odstraněním i-tého řádku a j-tého sloupce.
Například pro vstup:
7 1.577
program vytiskne:
4.24302193
Příklad I Vstup:
1 2 0
[]([]) ()[][] [[]]() [][]() ()[[]] [()][] ([])[] [[()]] [()[]] [([])] [[]()] ([[]]) [][()] ([][]) []()[]
Příklad II. Vstup
1 1 1
([{}]) ([]{}) ([]){} ({[]}) ({}[]) ({})[] ()[{}] ()[]{} (){[]} (){}[] [({})] [(){}] [()]{} [{()}] [{}()] ...