4262 - FiboRec: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
No edit summary
Cata (talk | contribs)
No edit summary
 
(One intermediate revision 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 y.
* 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.
== Exemplu ==
FiboRec(1, 1) = 1, FiboRec(3, 5) = 1, FiboRec(7, 8) = 0, FiboRec(8, 5) = 0, FiboRec(5, 8) = 1.


== Explicație ==
==Date de intrare==
Această funcție recursivă primește ca argumente două numere întregi pozitive x și y, iar scopul ei este de a verifica dacă y se poate obține prin adunarea lui x cu un număr de termeni consecutivi din șirul lui Fibonacci.
Programul citește de la tastatură numerele x și y.


Șirul lui Fibonacci este definit astfel: primul termen este 1, al doilea termen este 1, iar fiecare termen următor este suma celor două precedente. Deci, primii termeni ai șirului sunt: 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
==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."


Funcția utilizează recursivitatea pentru a verifica dacă y poate fi obținut prin adunarea lui x cu un număr de termeni consecutivi din șirul lui Fibonacci. Dacă x și y sunt egale, atunci y poate fi obținut prin adunarea lui x cu zero termeni, deci funcția returnează 1.
==Exemplu 1==
 
; Intrare
Dacă x este mai mare decât y sau y este mai mic decât 1, atunci nu se poate obține y prin adunarea lui x cu un număr de termeni consecutivi din șirul lui Fibonacci, așa că funcția returnează 0.
: Introduceti valoarea lui x: 5
 
: Introduceti valoarea lui y: 8
În caz contrar, funcția calculează diferența dintre y și x și o folosește ca prim argument într-un nou apel al funcției FiboRec, iar al doilea argument devine x. Astfel, dacă diferența dintre y și x se găsește în șirul lui Fibonacci, atunci funcția va returna 1.
; 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 ==
Line 38: Line 46:
         return FiboRec(y - x, x)
         return FiboRec(y - x, x)


def main():
if __name__ == "__main__":
     x = input("Introduceti valoarea lui x: ")
     x = input("Introduceti valoarea lui x: ")
     y = input("Introduceti valoarea lui y: ")
     y = input("Introduceti valoarea lui y: ")
Line 46: Line 54:
         if validate_FiboRec(x, y):
         if validate_FiboRec(x, y):
             result = FiboRec(x, y)
             result = FiboRec(x, y)
            print("Datele introduse sunt corecte.")
             if result == 1:
             if result == 1:
                 print(f"Numerele {x} si {y} sunt consecutive in sirul Fibonacci.")
                 print(f"Numerele {x} si {y} sunt consecutive in sirul Fibonacci.")
Line 55: Line 64:
         print("Valorile introduse nu sunt numere intregi.")
         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.