Rozwiązania poniższych zadań to proste procedury operujące na liczbach całkowitych.
Ich rozwiązanie wymaga zastosowania rekurencji ogonowej.
Dla każdej procedury rekurencyjnej podaj jej specyfikację, tj. warunek wstępny i końcowy,
oraz uzasadnij jej poprawność.
Poprawność procedur rekurencyjnych można pokazać przez indukcję.
Nie zapomnij o uzasadnieniu własności stopu.
- Potęgowanie liczb całkowitych (z akumulatorem).
Rozwiązania
- [Bentley]
Dana jest funkcja f:{1,2,…,n}→Z.
Należy znaleźć takie 1≤a≤b≤n, że suma ∑bi=af(i) jest największa.
Napisz taką procedurę p
, że p f n=b−a+1 (dla a i b jak wyżej).
Rozwiązania
-
Napisz procedurę zera_silni:int→int, która dla danej dodatniej liczby całkowitej n obliczy ile zer znajduje się na końcu zapisu dziesiętnego liczby n!.
Rozwiązania
-
Dana jest funkcja nierosnąca f:int→int, taka, że f(x+1)≥f(x)−1.
Napisz procedurę, która znajduje punkt stały tej funkcji, tzn. taką liczbę x, że f(x)=x
(lub jeśli punkt stały nie istnieje, to taką liczbę x, że f(x−1)≥x oraz f(x)≤x).
Rozwiązania
-
Dana jest różnowartościowa funkcja f:int→int.
Napisz procedurę maksima
, która dla danych liczb l i p (l≤p) obliczy ile lokalnych maksimów ma funkcja f w przedziale [l,p].
-
Przypomnij sobie rozwiązania zadań z poprzednich ćwiczeń.
Jeśli rozwiązałeś je nie stosując rekurencji ogonowej, to czy potrafisz je rozwiązać (lepiej) stosując ją?