====== 9. Rekurze ====== 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); ==== Úkol 1: umocňování ==== * Napište rekurzivní funkci ''power(x,n)'', která bude počítat $x^n$ * Porovnejte s iterativní verzí ==== Úkol 2: narovnání ==== * Uvažujme seznam, který může obsahovat jako prvky další seznamy, např.: a=[1, 2, [3, [4, 5], 6, [7]], [8, 9], 10] * Napište funkci ''flatten'', která vytvoří jeden seznam, který bude obsahovat všechny prvky ze seznamu ''a'' vložené do tohoto seznamu. * Výsledkem funkce ''flatten(a)'': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] * K testu prvku, zda je pole (list), použijte funkci type: if type(x) is list: ==== Úkol 3: binomický koeficient ==== * Napište funkci ''binomial(k,n)'', která počítá hodnotu $ n \choose k $ * Můžete využít vztah $ \binom{n}{k} = \binom{n-1}{k} + \binom{n-1}{k-1} $ * Počáteční podmínky $\binom{n}{0}=\binom{n}{n}=1$ a $\binom{n}{1}=\binom{n}{n-1}=n$ ==== Úkol 4: výpočet Fibonacciho posloupnosti ==== Napište rekurzivní výpočet Fibonacciho posloupnosti. Pro tuto posloupnost platí: * $F_n = F_{n-1} + F_{n-2}$ * První členy posloupnosti jsou $F_0 = 0$ a $F_1 = 1$.