Wyszukiwanie liniowe rekurencyjnie
Treść zadania
Napisz rekurencyjną funkcję wyszukaj(lista, klucz, indeks=0), która zwraca indeks pierwszego wystąpienia liczby klucz w liście, sprawdzając kolejne elementy od pozycji indeks. Jeśli klucz nie występuje w liście, funkcja zwraca -1.
Program wczytuje listę i klucz, wywołuje funkcję i wypisuje wynik.
Dane wejściowe
- 1. linia:
n— liczba elementów listy - 2. linia:
nliczb całkowitych oddzielonych spacjami - 3. linia:
klucz— liczba całkowita
Dane wyjściowe
Jedna liczba całkowita — indeks pierwszego wystąpienia klucza (indeksy liczymy od 0) albo -1, jeśli klucza nie ma w liście.
Ograniczenia
1 ≤ n ≤ 100- elementy listy i klucz są z zakresu
-1000 … 1000
Uwagi
- Przypadki bazowe:
indekswyszedł poza listę (klucza nie ma) albolista[indeks]jest równe kluczowi. W przeciwnym razie szukaj dalej od pozycjiindeks + 1.
Przykład
3 1 2 2 2
1
Liczba 2 występuje na pozycjach 1 i 2 — wypisujemy pierwszą z nich.
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 15
Poniższe zadania uczą rekurencji: funkcja rozwiązuje problem, wywołując samą siebie dla mniejszych danych, aż dojdzie do przypadku bazowego, w którym odpowiedź jest znana od razu (np. $0! = 1$).
Konwencje wspólne:
- Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście. Program wczytuje dane, wywołuje funkcję opisaną w treści i wypisuje wynik (gotowy szkielet znajdziesz w sekcji „Kod startowy”).
- Rozwiązanie musi być rekurencyjne. Właściwe obliczenia wykonuje funkcja, która wywołuje samą siebie. Nie używaj w niej pętli
foraniwhile, ani gotowych narzędzi, które wykonają całą pracę za Ciebie (np.sum(),pow(), operatora**,math.factorial(),list.index()). Sprawdzarka porównuje tylko wynik, ale celem zadań jest ćwiczenie rekurencji. - Każda funkcja rekurencyjna potrzebuje przypadku bazowego (kiedy przestajemy się wywoływać) i kroku rekurencyjnego (wywołania dla mniejszego problemu). Bez przypadku bazowego program przerwie działanie błędem
RecursionError. - Python ogranicza głębokość rekurencji (domyślnie do około 1000 zagnieżdżonych wywołań), dlatego dane w zadaniach są małe.
- Liczby naturalne liczymy od zera: $0, 1, 2, \dots$
- Program nie wypisuje komunikatów typu „Podaj liczbę:”.
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomiono5 4 8 15 16 23 4
0
Test 2
Nie uruchomiono5 4 8 15 16 23 23
4
Test 3
Nie uruchomiono6 3 1 4 1 5 1 1
1
Test 4
Nie uruchomiono3 10 20 30 25
-1
Test 5
Nie uruchomiono1 42 7
-1
Test 6
Nie uruchomiono4 7 0 -5 -5 -5
2