Úvod do rekurze

Hierarchical and Recursive Queries in SQL Server

Jasmin Ludolf

Content Developer

Co je rekurze?

Rekurze je použití procedury, podrutiny, funkce nebo algoritmu, který volá sám sebe jednou nebo vícekrát, dokud není splněna zadaná podmínka

Obrázek znázorňující vlastnost rekurze – opakované volání sebe sama.

Hierarchical and Recursive Queries in SQL Server

Příklad rekurze z reálného světa

Rodokmen – Nalezení všech otců za posledních 5 generací

  • Rozložte problém na menší problémy stejného typu
    1. Celý problém: Nalezení všech pěti generací
    2. Dílčí problém: Najít otce, najít otce otce, ...
  • Omezte počet kroků

Rekurzivní vlastnost Hanojské věže.

Hierarchical and Recursive Queries in SQL Server

Fakta o rekurzi

Výhody:

  • Řešení problémů rekurzivním způsobem
  • Snadná čitelnost a sledovatelnost
  • Rekurzi lze omezit podmínkou ukončení

Nevýhody:

  • Pomalá doba výpočtu
Hierarchical and Recursive Queries in SQL Server

Příklad rekurze – součet čísel

Matematická definice

Součet po sobě jdoucích čísel je rekurzivně definován takto:

number = 1 
    for iteration = 1
number = number + (iteration - 1) 
    for iteration > 1

Součet čísel do 5 je:

1+2+3+4+5 = 15
Hierarchical and Recursive Queries in SQL Server

Příklad rekurze – součet čísel

  • Rekurze v SQL: Common Table Expression - CTE
WITH calculate_SumOfNumber AS
     ( -- Initial Query
    SELECT 1 AS iteration, 1 AS SumOfNumber

UNION ALL -- Recursive Part SELECT iteration + 1, SumOfNumber + (iteration + 1) FROM calculate_SumOfNumber
WHERE iteration < 6 )
SELECT SumOfNumber FROM calculate_SumOfNumber
Hierarchical and Recursive Queries in SQL Server

Pojďme si procvičit!

Hierarchical and Recursive Queries in SQL Server

Preparing Video For Download...