return r + 1 - main5.amu.edu.pl
Transkrypt
return r + 1 - main5.amu.edu.pl
Algorytmy i programowanie Zadania domowe 5 integer procedure AAA (n) integer procedure BBB (n) if n = 1 if n = 1 integer procedure CCC (n) if n = 1 then return 1 then return 1 then return 1 else r ← AAA (n − 1) else r ← BBB (n − 1) else r ← CCC (n + 1) return r + 1 return r ∗ n integer procedure DDD (n) integer procedure EEE (n) if n = 1 if n = 1 return r + 1 integer procedure FFF (n) if n = 1 then return 1 then return 1 then return 1 else r ← DDD (n mod 2) else r ← EEE (n div 2) else r ← FFF (n div 2) return r + 1 return r ∗ 2 return r + 1 1. Przeanalizować powyższe sześć procedur rekurencyjnych i odpowiedzieć na pytania: a) Czy wszystkie rekurencje się zakończą1? b) Jakie wyniki zwracają poszczególne funkcje? 2. Opracować algorytmy iteracyjne (nie wykorzytsujące rekurencji), które będą zwracały te same wyniki co powyższe algorytmy. 3. Opracować algorytm rekurencyjny, który będzie wypisywał wszystkie możliwe podzbiory zbioru n elementowego, to znaczy na przykład dla n = 3 algorytm może (ale nie musi dokładnie tak samo) wyświetlać2: 0 1 2 3 1 2 1 3 2 3 1 2 3 1W przypadku gdyby jakaś rekurencja nie kończyła się, nie jest konieczne wykonywanie dla niej dalszych zadań. 2Zakładamy, że 0 oznacza zbiór pusty.