4262 - FiboRec: Difference between revisions
Pagină nouă: == Cerința == Scrieți funcția recursivă cu antetul<br> <code>def FiboRec(x, y)</code><br> care primind ca parametri două numere întregi x și y, returnează 1 dacă x și y și sunt doi termeni consecutivi ai șirului Fibonacci, sau returnează 0 în caz contrar. == Restricții și precizări == * Primii zece termeni ai șirului Fibonacci sunt: 1,1,2,3,5,8,13,21,34,55. * Dacă x și y sunt termeni consecutivi ai șirului Fibonacci, atunci trebuie ca x ≤ y. * Se recom... |
No edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 6: | Line 6: | ||
== Restricții și precizări == | == Restricții și precizări == | ||
* Primii zece termeni ai șirului Fibonacci sunt: 1,1,2,3,5,8,13,21,34,55. | * Primii zece termeni ai șirului Fibonacci sunt: 1,1,2,3,5,8,13,21,34,55. | ||
* Dacă x și y sunt termeni consecutivi ai șirului Fibonacci, atunci trebuie ca x | * Dacă x și y sunt termeni consecutivi ai șirului Fibonacci, atunci trebuie ca x ⩽ y. | ||
* Se recomandă utilizarea recursivității în rezolvarea problemei. | * Se recomandă utilizarea recursivității în rezolvarea problemei. | ||
== | ==Date de intrare== | ||
Programul citește de la tastatură numerele x și y. | |||
==Date de ieșire== | |||
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte.", apoi pe un rând nou un mesaj dat în funcție de valoarea returnată de funcția FiboRec, reprezentând numărul cerut. În cazul în care x ⩾ y, se va afișa "Valorile introduse nu sunt valide.", iar dacă numerele introduse nu sunt întregi, se va afișa "Valorile introduse nu sunt numere intregi." | |||
==Exemplu 1== | |||
; Intrare | |||
: Introduceti valoarea lui x: 5 | |||
: Introduceti valoarea lui y: 8 | |||
; Ieșire | |||
: Datele introduse sunt corecte. | |||
: Numerele 5 si 8 sunt consecutive in sirul Fibonacci. | |||
==Exemplu 2== | |||
; Intrare | |||
: Introduceti valoarea lui x: 5 | |||
: Introduceti valoarea lui y: 9 | |||
; Ieșire | |||
: Datele introduse sunt corecte. | |||
: Numerele 5 si 9 nu sunt consecutive in sirul Fibonacci. | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
def validate_FiboRec(x, y): | |||
if isinstance(x, int) and isinstance(y, int) and x <= y and y > 0: | |||
return True | |||
else: | |||
return False | |||
def FiboRec(x, y): | def FiboRec(x, y): | ||
if x == y: | if x == y: | ||
Line 23: | Line 45: | ||
else: | else: | ||
return FiboRec(y - x, x) | return FiboRec(y - x, x) | ||
if __name__ == "__main__": | |||
x = input("Introduceti valoarea lui x: ") | |||
y = input("Introduceti valoarea lui y: ") | |||
try: | |||
x = int(x) | |||
y = int(y) | |||
if validate_FiboRec(x, y): | |||
result = FiboRec(x, y) | |||
print("Datele introduse sunt corecte.") | |||
if result == 1: | |||
print(f"Numerele {x} si {y} sunt consecutive in sirul Fibonacci.") | |||
else: | |||
print(f"Numerele {x} si {y} nu sunt consecutive in sirul Fibonacci.") | |||
else: | |||
print("Valorile introduse nu sunt valide.") | |||
except ValueError: | |||
print("Valorile introduse nu sunt numere intregi.") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicație== | |||
Prima funcție, `validate_FiboRec(x, y)`, verifică dacă valorile `x` și `y` sunt numere întregi, dacă `x` este mai mic sau egal cu `y`, iar `y` este mai mare decât zero. Dacă toate condițiile sunt îndeplinite, funcția returnează `True`, altfel returnează `False`. | |||
A doua funcție, `FiboRec(x, y)`, folosește o abordare recursivă pentru a verifica dacă două numere întregi consecutive se află în șirul Fibonacci între `x` și `y`. Funcția verifică dacă `x` și `y` sunt egale și, în acest caz, returnează 1, pentru că orice număr este considerat a fi în șirul Fibonacci. Dacă `x` este mai mare decât `y` sau `y` este mai mic sau egal cu 0, funcția returnează 0. În celelalte cazuri, funcția calculează următorul număr din șirul Fibonacci folosind formula F(n) = F(n-1) + F(n-2) și continuă recursiv cu această formulă până când se ajunge la numărul `y-x`. | |||
În funcția principală, se citesc de la tastatură valorile `x` și `y`. Se încearcă conversia valorilor la numere întregi și se verifică dacă acestea sunt valide folosind funcția `validate_FiboRec`. Dacă valorile sunt valide, se apelează funcția `FiboRec` pentru a verifica dacă numerele sunt consecutive în șirul Fibonacci și se afișează un mesaj corespunzător. Dacă valorile `x` și `y` nu sunt valide, se afișează un mesaj de eroare. |
Latest revision as of 07:17, 3 May 2023
Cerința[edit | edit source]
Scrieți funcția recursivă cu antetul
def FiboRec(x, y)
care primind ca parametri două numere întregi x și y, returnează 1 dacă x și y și sunt doi termeni consecutivi ai șirului Fibonacci, sau returnează 0 în caz contrar.
Restricții și precizări[edit | edit source]
- Primii zece termeni ai șirului Fibonacci sunt: 1,1,2,3,5,8,13,21,34,55.
- Dacă x și y sunt termeni consecutivi ai șirului Fibonacci, atunci trebuie ca x ⩽ y.
- Se recomandă utilizarea recursivității în rezolvarea problemei.
Date de intrare[edit | edit source]
Programul citește de la tastatură numerele x și y.
Date de ieșire[edit | edit source]
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele introduse sunt corecte.", apoi pe un rând nou un mesaj dat în funcție de valoarea returnată de funcția FiboRec, reprezentând numărul cerut. În cazul în care x ⩾ y, se va afișa "Valorile introduse nu sunt valide.", iar dacă numerele introduse nu sunt întregi, se va afișa "Valorile introduse nu sunt numere intregi."
Exemplu 1[edit | edit source]
- Intrare
- Introduceti valoarea lui x: 5
- Introduceti valoarea lui y: 8
- Ieșire
- Datele introduse sunt corecte.
- Numerele 5 si 8 sunt consecutive in sirul Fibonacci.
Exemplu 2[edit | edit source]
- Intrare
- Introduceti valoarea lui x: 5
- Introduceti valoarea lui y: 9
- Ieșire
- Datele introduse sunt corecte.
- Numerele 5 si 9 nu sunt consecutive in sirul Fibonacci.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python"> def validate_FiboRec(x, y):
if isinstance(x, int) and isinstance(y, int) and x <= y and y > 0: return True else: return False
def FiboRec(x, y):
if x == y: return 1 elif x > y or y < 1: return 0 else: return FiboRec(y - x, x)
if __name__ == "__main__":
x = input("Introduceti valoarea lui x: ") y = input("Introduceti valoarea lui y: ") try: x = int(x) y = int(y) if validate_FiboRec(x, y): result = FiboRec(x, y) print("Datele introduse sunt corecte.") if result == 1: print(f"Numerele {x} si {y} sunt consecutive in sirul Fibonacci.") else: print(f"Numerele {x} si {y} nu sunt consecutive in sirul Fibonacci.") else: print("Valorile introduse nu sunt valide.") except ValueError: print("Valorile introduse nu sunt numere intregi.")
</syntaxhighlight>
Explicație[edit | edit source]
Prima funcție, `validate_FiboRec(x, y)`, verifică dacă valorile `x` și `y` sunt numere întregi, dacă `x` este mai mic sau egal cu `y`, iar `y` este mai mare decât zero. Dacă toate condițiile sunt îndeplinite, funcția returnează `True`, altfel returnează `False`.
A doua funcție, `FiboRec(x, y)`, folosește o abordare recursivă pentru a verifica dacă două numere întregi consecutive se află în șirul Fibonacci între `x` și `y`. Funcția verifică dacă `x` și `y` sunt egale și, în acest caz, returnează 1, pentru că orice număr este considerat a fi în șirul Fibonacci. Dacă `x` este mai mare decât `y` sau `y` este mai mic sau egal cu 0, funcția returnează 0. În celelalte cazuri, funcția calculează următorul număr din șirul Fibonacci folosind formula F(n) = F(n-1) + F(n-2) și continuă recursiv cu această formulă până când se ajunge la numărul `y-x`.
În funcția principală, se citesc de la tastatură valorile `x` și `y`. Se încearcă conversia valorilor la numere întregi și se verifică dacă acestea sunt valide folosind funcția `validate_FiboRec`. Dacă valorile sunt valide, se apelează funcția `FiboRec` pentru a verifica dacă numerele sunt consecutive în șirul Fibonacci și se afișează un mesaj corespunzător. Dacă valorile `x` și `y` nu sunt valide, se afișează un mesaj de eroare.