1511 - FCautareRec
Cerinţa
Scrieţi definiția completă a unei funcții recursive care are ca parametrii un număr natural n, un șir crescător X de numere reale având n elemente și un număr real v și care returnează poziția pe care apare în șir valoarea v. În cazul în care v nu apare în șir, se va returna valoarea -1. În cazul în care v apare în șir pe mai multe poziții, se va returna una dintre acestea.
Date de intrare
Se va introduce de la tastatură un număr natural care va fi transmis ca perimetru
Date de ieșire
Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse." În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse.".
Restricţii şi precizări
0 < n <= 100 v și elementele lui X sunt numere reale – se va folosi tipul double numele subprogramului cerut este cautare parametrii sunt, în această ordine: n, X, v elementele tabloului X sunt indexate de la zero se recomandă realizarea unei soluții recursive
Exemplu
Dacă n=6, X=(9.5,16.3,28.3,49.7,52.4,73), iar v=52.4, funcția va returna valoarea 4.
Rezolvare
def cautare(n, X, v): # Caz de bază: lista X este goală if n == 0: return -1 # Caz de bază: valoarea v este pe prima poziție din lista X if X[0] == v: return 0 # Apel recursiv pentru lista X fără prima valoare poz = cautare(n-1, X[1:], v) # Dacă valoarea v a fost găsită în lista X fără prima valoare, se va returna poziția respectivă +1 if poz != -1: return poz+1 # Dacă valoarea v nu a fost găsită în lista X, se va returna -1 return -1 # Citire date de intrare n = int(input()) # Verificare condiții de intrare if n <= 0 or n > 100: print("Datele de intrare nu corespund restricțiilor impuse.") else: X = list(map(float, input().split())) v = float(input()) # Apel funcție și afișare rezultat pozitie = cautare(n, X, v) if pozitie == -1: print("Valoarea", v, "nu a fost gasita in lista.") else: print("Valoarea", v, "a fost gasita pe pozitia", pozitie)