Lista zadań 3: Rekurencja, schemat rekursji i funkcje pierwotnie

Transkrypt

Lista zadań 3: Rekurencja, schemat rekursji i funkcje pierwotnie
Rekurencja, schemat rekursji i funkcje
pierwotnie rekurencyjne
Elementy Logiki i Teorii Mnogości 2015/2016
Zadanie 1. Oblicz iteracyjnie i rekurencyjnie f (4), gdzie f jest funkcją określoną na
zbiorze liczb naturalnych taką, że f (0) = 1, f (1) = −1 oraz
(a) f (n) = f (n − 1)2 + f (n − 2),
(b) f (n) = 2f (n−1) ,
(c) f (n) = (−3)n f (n − 1),
(d) f (n) = n · f (n − 1),
(e) f (n) = f (n − 1) · f (n − 2) + 2
dla dowolnej liczby naturalnej n ­ 2.
Zadanie 2. Podaj rekurencyjną definicję następujących ciągów:
(a) an = 5 dla n ∈ N,
(b) an = 2n dla n ∈ N,
(c) an = 5n + 2 dla n ∈ N,
(d) an = n! dla n ∈ N,
(e) dowolnego ciągu arytmetycznego o ustalonym wyrazie pierwszym i ustalonej różnicy,
(f) dowolnego ciągu geometrycznego o ustalonym wyrazie pierwszym i ustalonym ilorazie.
Zadanie 3. Znajdź postać jawną ciągu (an )n∈N , gdzie
(a)


a0 = 1,

an = nan−1 dla n ­ 1,
(b)
1


a0 = 5,

an = nan−1 dla n ­ 1,
(c)


a0 = 0,

an = an−1 + 1 dla n ­ 1,
a0 = 0,
(d) 
an = an−1 + n2 dla n ­ 1,
(e)

a0 = 7,





a0 = 2,




an = 3an−1 − 2an−2 dla n ­ 2.
(f)  a1 = 3,


 a = 2a
n
n−1 − an−2 dla n ­ 2,









(g)
a0 = 1,
2
an = n an−1 dla n ­ 1,
a1 = 3,
Zadanie 4. Definiujemy rekurencyjnie ciąg (an )n∈N w następujący sposób:


a0 = a1 = 1,

an = 2an−1 + an−2 dla n ­ 2.
(a) Oblicz iteracyjnie i rekurencyjnie a6 .
(b) Udowodnij, że wszystkie wyrazy ciągu (an )n∈N są nieparzyste.
Zadanie 5. Udowodnij, że jeśli





a0 = 2,




an = an−1 + 2an−2 dla n ­ 2,
a1 = 3,
to an ­ 2n dla dowolnego n ∈ N.
Zadanie 6*. Ciąg Fibonacciego dany jest wzorem rekurencyjnym





F0 = 0,




Fn = Fn−1 + Fn−2 dla n ­ 2.
F1 = 1,
Udowodnij, że
(a) Fn =
√1
5
√ n
1+ 5
2
−
√1
5
√ n
1− 5
2
,
n ­ 0,
(b) 2|F3k dla k ­ 0,
(c)
Pn
k=1
Fk = Fn+2 − 1 dla n ­ 0.
Zadanie 7. Podaj rekurencyjną definicję ciągu obliczanego przez następującą funkcję w
C/C++:
int ciag(int n)
{
2
int a0 = 1;
int wyn = a0;
for (int i = 1; i <= n; i++)
{
wyn = 2 * wyn + 3;
}
return wyn;
}
Zadanie 8. Sprawdź, czy poniższe dwie funkcje w C/C++ (ciag i ciagRek) obliczają
wyrazy tego samego ciągu:
• int ciag(int n)
{
int a0 = 1;
int wyn = a0;
for (int i = 1; i <= n; i++)
{
wyn = 5 * wyn;
}
return wyn;
}
• int ciagRek(int n)
{
if (n == 0)
return 1;
else
return 5 * ciagRek(n-1);
}
Podaj wzór jawny tego ciągu, a następnie wykaż indukcyjnie, że jest on rosnący.
Zadanie 9. Palindromem nad alfabetem Σ nazywamy słowo nad Σ postaci
a1 a2 ...an−1 an an an−1 ...a2 a1 lub a1 a2 ...an−1 an ban an−1 ...a2 a1 .
Palindrom jest więc słowem, które czyta się tak samo od lewej strony do prawej oraz od prawej
do lewej. Niech Σ = {0, 1}, zaś P będzie zbiorem zdefiniowanym rekurencyjnie w następujący
sposób:
3
• 0 ∈ P oraz 1 ∈ P ,
• jeśli a ∈ P , to 0a0 ∈ P oraz 1a1 ∈ P .
Czy zbiór P jest zbiorem wszystkich palindromów? Jeśli nie, to zmień powyższą definicję tak,
aby zbiór P posiadał tę własność.
Zadanie 10. Niech Σ = {a, b} będzie alfabetem i niech sn oznacza liczbę tych wszystkich
słów długości n nad Σ, które nie zawierają podsłowa 0 ab0 .
(a) Oblicz s0 , s1 , s2 , s3 .
(b) Znajdź wzór na sn i udowodnij, że jest on poprawny.
Zadanie 11. Niech Σ = {a, b} będzie alfabetem i niech tn oznacza liczbę tych wszystkich
słów długości n nad Σ, w których litera 0 a0 występuje parzystą liczbę razy.
(a) Oblicz t0 , t1 , t2 , t3 .
(b) Znajdź wzór na tn i udowodnij, że jest on poprawny.
Zadanie 12. Niech Σ będzie alfabetem, zaś tail funkcją zdefiniowaną na zbiorze wszystkich
list [Σ] nad Σ następującą formułą rekurencyjną
tail([]) = [],
tail([a]) = [a], dla a ∈ Σ,
tail(a : l) = tail(l), dla a ∈ Σ, l ∈ [Σ].
Udowodnij, że dla dowolnej, niepustej listy l = [a1 , a2 , . . . , an ] ∈ [Σ] zachodzi
tail(l) = [an ].
Zadanie 13. Niech Σ będzie alfabetem, zaś head funkcją zdefiniowaną na zbiorze wszystkich list [Σ] nad Σ następującą formułą rekurencyjną
head([]) = [],
head([a]) = [a], dla a ∈ Σ,
head(l + +[a]) = head(l), dla a ∈ Σ, l ∈ [Σ].
Udowodnij, że dla dowolnej, niepustej listy l = [a1 , a2 , . . . , an ] ∈ [Σ] zachodzi
head(l) = [a1 ].
4
Zadanie 14. Niech pn oznacza liczbę wszystkich podziałów zbioru {1, ..., n} na dwa niepuste i rozłączne podzbiory. Znajdź zależność rekurencyjną dla ciągu (pn )n∈N i wyznacz jego
postać jawną.
Zadanie 15. W pewnym mieście jeden człowiek zachorował na grypę. Każdego następnego
dnia każda chora osoba zarażała dziennie dokładnie cztery zdrowe osoby. Ile chorych było po
n dniach, przy założeniu, że chory zaczyna zarażać po 24 godzinach od zachorowania oraz
nikt w czasie tych n dni nie wyzdrowiał? Rozwiązanie podaj w postaci rekurencyjnej oraz
jawnej.
Zadanie 16. Proces przydzielania n dzieci do n miejsc w klasie może być podzielony na
dwie fazy: (1) wybór dziecka na pierwsze miejsce i (2) przypisanie pozostałych n − 1 dzieci
do pozostałych miejsc. Niech An oznacza liczbę różnych przypisań n dzieci do n miejsc.
(a) Napisz rekurencyjną definicję ciągu An .
(b) Oblicz rekurencyjnie A6 .
(c) Czy ciąg An wydaje Ci się znajomy?
Zadanie 17. Weźmy pod uwagę proces przydzielania 2n dzieci do n wagoników kolejki tak,
by w każdym wagoniku było dwoje dzieci. Najpierw wybieramy dwoje dzieci do pierwszego
wagonika (pokaż, że można to zrobić na
2n(2n−1)
2
sposobów). Następnie przydzielamy pozostałe
dzieci do pozostałych n − 1 wagoników. Niech Bn będzie liczbą sposobów, na które można
przydzielić 2n dzieci do n wagoników.
(a) Napisz rekurencyjną definicję ciągu Bn .
(b) Oblicz rekurencyjnie B3 .
(c) Oblicz B5 metodą iteracyjną.
(d) Podaj ogólny wzór na Bn .
Definicja Funkcja f : N → N jest określona poprzez schemat rekursji zastosowany do
funkcji h : N2 → N i liczby n0 ∈ N, o ile:
(1) f (0) = n0 ,
(2) f (n + 1) = h(n, f (n)) dla dowolnego n ∈ N.
Zadanie 18. Podaj, jaką funkcję określa schemat rekursji zastosowany do funkcji h :
N2 → N i liczby n0 ∈ N, jeśli
(a) h(m, n) = 0,
5
(b) h(m, n) = n,
(c) h(m, n) = m,
(d) h(m, n) = n + 1,
(e) h(m, n) = m + n
dla dowolnych m, n ∈ N.
Zadanie 19. Funkcję f : N → N określ za pomocą schematu rekursji, jeśli:
(a) f (n) = 2n,
(b) f (n) = 2n ,
(c) f (n) = n2 ,
(d) f (n) = n2 + 3n + 5.
Definicja
(1) Funkcją zerową nazywamy funkcję zero : N → N taką, że zero(n) = 0 dla dowolnego
n ∈ N.
(2) Funkcją następnika nazywamy funkcję succ : N → N taką, że succ(n) = n + 1 dla dowolnego n ∈ N.
(3) Niech k ­ 1 oraz i = 1, ..., k. Definiujemy funkcję rzutu Πki : Nk → N następującym
wzorem:
Πki (n1 , ..., nk ) = ni
dla dowolnych n1 , ..., nk ∈ N.
Zadanie 20. Podaj jawną postać następujących funkcji:
(a) succ ◦ zero,
(b) succ ◦ succ ◦ succ,
(c) succ ◦ Π32 .
Zadanie 21. Przedstaw funkcję f : Nm → N w postaci superpozycji funkcji zero, succ
oraz Πki (dla odpowienich i oraz k), jeżeli:
(a) m = 1, f (n) = n + 2 dla dowolnego n ∈ N,
6
(b) m = 3, f (n1 , n2 , n3 ) = 0 dla dowolnych n1 , n2 , n3 ∈ N,
(c) m = 2, f (n1 , n2 ) = 3 dla dowolnych n1 , n2 ∈ N.
Zadanie 22*. Udowodnij, że następujące funkcje są pierwotnie rekurencyjne:
(a) f (n) = 2,
(b) f (n) = n0 , gdzie n0 jest ustaloną liczbą naturalną.
(c) f (x, y) = x + y,
(d) f (x, y) = x · y,
(e) fn (x) = xn ,
(f) f (x) = (x + 1)!,


(g) f (x, y) = 
x − y, gdy x ­ y
0,
gdy x < y
.
7