Identifici recurența
Explici cum un termen poate fi obținut din termeni anteriori.
Termeni obținuți din valori inițiale și termeni anteriori
Explici cum un termen poate fi obținut din termeni anteriori.
Construiești liste folosind valori inițiale și o relație de recurență.
Simulezi evoluția variabilelor și verifici ordinea termenilor.
Alegi cazuri-limită și valori relevante pentru algoritmii de generare.
Ce este esențial pentru o secvență recurentă?
Nu toate secvențele au o formulă simplă care exprimă direct fiecare termen. Uneori următorul termen se obține din unul sau mai mulți termeni calculați anterior. În acest caz folosim o relație de recurență.
Considerăm secvența 2, 5, 8, 11, ... . Primul termen este 2, iar fiecare termen următor se obține adăugând 3: a₁ = 2, aᵢ = aᵢ₋₁ + 3.
La generarea unui termen avem nevoie de informația calculată anterior. Variabila care păstrează termenul curent este actualizată după fiecare pas.
Șirul lui Fibonacci este un exemplu cunoscut: 1, 1, 2, 3, 5, 8, ..., unde fiecare termen, începând cu al treilea, este suma celor doi termeni anteriori.
De ce sunt necesare valorile inițiale într-o recurență?
Imaginează-ți un aparat care primește o valoare, aplică o regulă și produce următoarea valoare. Pentru 2, 5, 8, 11, ... aparatul „adaugă 3”. Rezultatul devine noua valoare de intrare pentru pasul următor.
2, 5, 8, 11, 14, 17
Fiecare termen nou este termenul anterior + pasul.
n = int(input())
a = 2
valori = []
for i in range(n):
valori.append(a)
a = a + 3
print(valori)Pentru n = 5, lista este [2, 5, 8, 11, 14]. Variabila a reprezintă termenul curent; după memorarea lui, îl actualizăm pentru următorul pas.
n = int(input())
a = 1
b = 1
valori = []
for i in range(n):
valori.append(a)
c = a + b
a = b
b = c
print(valori)La fiecare pas, a devine termenul următor, iar b păstrează informația necesară pentru calculul următorului termen.
citește n
a valoare inițială ←
valori []
pentru i 1,n execută
adaugă a la valori
a a + p ←
sfârșit pentru
scrie valori
citește n
a 1 ←
b 1 ←
valori []
pentru i 1,n execută
adaugă a la valori
c a + b ←
a b ←
b c ←
sfârșit pentru
scrie valoriÎn Fibonacci, avem nevoie de vechile valori ale lui a și b pentru a calcula c.
Dacă modifici a prea devreme, nu mai poți calcula corect următorul termen.
Pentru exact n termeni, bucla trebuie să se execute de n ori.
O eroare în valorile inițiale se propagă în toată secvența.
Se citește n. Generați lista primelor n numere din secvența 1, 1, 2, 3, 5, 8, ....
Intrare: n. Ieșire: lista termenilor. Idee: pornim cu a = 1 și b = 1. Memorăm a, apoi calculăm c = a + b și deplasăm perechea.
citește n
a 1; b 1
valori []
pentru i 1,n execută
adaugă a la valori
c a + b
a b
b c
sfârșit pentru
scrie valorin = int(input())
a = 1
b = 1
valori = []
for i in range(n):
valori.append(a)
c = a + b
a = b
b = c
print(valori)| Pas | a memorat | b după actualizare | listă |
|---|---|---|---|
| 1 | 1 | 2 | [1] |
| 2 | 1 | 3 | [1, 1] |
| 3 | 2 | 5 | [1, 1, 2] |
| 4 | 3 | 8 | [1, 1, 2, 3] |
| 5 | 5 | 13 | [1, 1, 2, 3, 5] |
| 6 | 8 | 21 | [1, 1, 2, 3, 5, 8] |
| Test | Date | Rezultat așteptat |
|---|---|---|
| Caz-limită | n = 1 | [1] |
| Caz normal | n = 6 | [1, 1, 2, 3, 5, 8] |
| Valoare relevantă | n = 8 | [1, 1, 2, 3, 5, 8, 13, 21] |
a și b reprezintă doi termeni consecutivi, iar c = a + b produce exact următorul termen.1. Ce este o relație de recurență?
2. Pentru 2,5,8,11,... care este pasul?
3. În Fibonacci, termenul următor este:
4. De ce folosim variabila c în exemplul Fibonacci?
5. Câte valori produce for i in range(n)?
6. Ce trebuie testat cu atenție la o recurență?
Realizați o aplicație care permite alegerea unei secvențe definite prin recurență. Programul trebuie să pornească de la valorile inițiale, să genereze n termeni, să îi memoreze și să afișeze lista. Pentru o variantă, folosiți Fibonacci; pentru alta, o secvență cu pas constant.
Verifică primele termene și ordinea actualizării variabilelor.