4262 - FiboRec: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
No edit summary
Cata (talk | contribs)
No edit summary
 
Line 15: Line 15:
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."
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==
==Exemplu 1==
; Intrare
; Intrare
: Introduceti valoarea lui x: 5
: Introduceti valoarea lui x: 5
Line 22: Line 22:
: Datele introduse sunt corecte.
: Datele introduse sunt corecte.
: Numerele 5 si 8 sunt consecutive in sirul Fibonacci.
: Numerele 5 si 8 sunt consecutive in sirul Fibonacci.
 
==Exemplu 2==
; Intrare
; Intrare
: Introduceti valoarea lui x: 5
: Introduceti valoarea lui x: 5

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.