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.