Iteracja

Napiszemy program, który zwróci element ciągu Fibonacciego o indeksie n. Zastosujemy iterację. Zaczniemy ponownie od utworzenia funkcji.

Linia 1. public static long iterFibonacci otwórz nawias okrągły int n zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. zamknij nawias klamrowy.

Wybieramy typ long, ponieważ wartości kolejnych wyrazów ciągu Fibonacciego rosną wykładniczo.

Parametr n funkcji będzie indeksem elementu ciągu, który ma być obliczony.

Zapisujemy warunki, po których spełnieniu zostanie zatrzymane działanie funkcji i zwróci ona wartość. Wiemy, że pierwszy wyraz ciągu Fibonacciego – zatem wyraz o indeksie 0 – ma wartość 0. Natomiast drugi wyraz – czyli wyraz o indeksie 1 – wynosi 1. Zapiszemy odpowiednie instrukcje warunkowe.

Linia 1. public static long iterFibonacci otwórz nawias okrągły int n zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. if otwórz nawias okrągły n znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. return 0 średnik. Linia 4. zamknij nawias klamrowy else if otwórz nawias okrągły n znak równości znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. return 1 średnik. Linia 6. zamknij nawias klamrowy. Linia 7. zamknij nawias klamrowy.

Musimy brać również pod uwagę przypadek, gdy wartość parametru n jest większa niż 1. W takiej sytuacji każdy kolejny element jest sumą dwóch poprzednich. Dla dalszego działania funkcji potrzebujemy zmiennych pomocniczych. Inicjalizujemy trzy zmienne pomocnicze: a, b (oznaczające wartości dwóch początkowych wyrazów ciągu) oraz i (indeks kolejnego elementu ciągu Fibonacciego). Przypisujemy im odpowiednio wartości 0, 1 i 2.

Linia 1. public static long iterFibonacci otwórz nawias okrągły int n zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. if otwórz nawias okrągły n znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. return 0 średnik. Linia 4. zamknij nawias klamrowy else if otwórz nawias okrągły n znak równości znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. return 1 średnik. Linia 6. zamknij nawias klamrowy. Linia 8. long a znak równości 0 średnik. Linia 9. long b znak równości 1 średnik. Linia 10. int i znak równości 2 średnik. Linia 12. zamknij nawias klamrowy.

Zapisujemy pętlę while, która będzie wykonywać się tak długo, dopóki wartość zmiennej i jest mniejsza od wartości zmiennej n lub jej równa.

Linia 1. public static long iterFibonacci otwórz nawias okrągły int n zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. if otwórz nawias okrągły n znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. return 0 średnik. Linia 4. zamknij nawias klamrowy else if otwórz nawias okrągły n znak równości znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. return 1 średnik. Linia 6. zamknij nawias klamrowy. Linia 8. long a znak równości 0 średnik. Linia 9. long b znak równości 1 średnik. Linia 10. int i znak równości 2 średnik. Linia 12. while otwórz nawias okrągły i otwórz nawias ostrokątny znak równości n zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. otwórz nawias ostrokątny code style znak równości cudzysłów white minus space dwukropek pre średnik cudzysłów data minus inline zamknij nawias ostrokątny zamknij nawias klamrowy otwórz nawias ostrokątny prawy ukośnik code zamknij nawias ostrokątny. Linia 15. zamknij nawias klamrowy.

W każdym obiegu pętli while najpierw obliczamy i-ty wyraz ciągu, czyli sumę dwóch poprzednich wyrazów ciągu. Wynik przypisujemy do zmiennej suma. Następnie zmiennej a przypisujemy wartość zmiennej b, a zmiennej b wartość zmiennej suma. Na końcu zwiększamy wartość zmiennej i o 1.

Linia 1. public static long iterFibonacci otwórz nawias okrągły int n zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. if otwórz nawias okrągły n znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. return 0 średnik. Linia 4. zamknij nawias klamrowy else if otwórz nawias okrągły n znak równości znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. return 1 średnik. Linia 6. zamknij nawias klamrowy. Linia 8. long a znak równości 0 średnik. Linia 9. long b znak równości 1 średnik. Linia 10. int i znak równości 2 średnik. Linia 12. while otwórz nawias okrągły i otwórz nawias ostrokątny znak równości n zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. long suma znak równości a plus b średnik. Linia 14. a znak równości b średnik. Linia 15. b znak równości suma średnik. Linia 16. i znak równości i plus 1 średnik. Linia 17. otwórz nawias ostrokątny code style znak równości cudzysłów white minus space dwukropek pre średnik cudzysłów data minus inline zamknij nawias ostrokątny zamknij nawias klamrowy otwórz nawias ostrokątny prawy ukośnik code zamknij nawias ostrokątny. Linia 19. zamknij nawias klamrowy.

Po zakończeniu pętli wartość zmiennej jest zwracana jako wynik działania funkcji.

Linia 1. public static long iterFibonacci otwórz nawias okrągły int n zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. if otwórz nawias okrągły n znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. return 0 średnik. Linia 4. zamknij nawias klamrowy else if otwórz nawias okrągły n znak równości znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. return 1 średnik. Linia 6. zamknij nawias klamrowy. Linia 8. long a znak równości 0 średnik. Linia 9. long b znak równości 1 średnik. Linia 10. int i znak równości 2 średnik. Linia 12. while otwórz nawias okrągły i otwórz nawias ostrokątny znak równości n zamknij nawias okrągły otwórz nawias klamrowy. Linia 13. long suma znak równości a plus b średnik. Linia 14. a znak równości b średnik. Linia 15. b znak równości suma średnik. Linia 16. i znak równości i plus 1 średnik. Linia 17. otwórz nawias ostrokątny code style znak równości cudzysłów white minus space dwukropek pre średnik cudzysłów data minus inline zamknij nawias ostrokątny zamknij nawias klamrowy otwórz nawias ostrokątny prawy ukośnik code zamknij nawias ostrokątny. Linia 19. return b średnik. Linia 21. zamknij nawias klamrowy.

Oto cały kod programu:

Linia 1. public class Main otwórz nawias klamrowy. Linia 2. public static void main otwórz nawias okrągły String args otwórz nawias kwadratowy zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. System kropka out kropka println otwórz nawias okrągły iterFibonacci otwórz nawias okrągły 3 zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 4. zamknij nawias klamrowy. Linia 5. otwórz nawias ostrokątny code style znak równości cudzysłów white minus space dwukropek pre średnik cudzysłów data minus inline zamknij nawias ostrokątny public static long iterFibonacci otwórz nawias okrągły int n zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. if otwórz nawias okrągły n znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. return 0 średnik. Linia 8. zamknij nawias klamrowy else if otwórz nawias okrągły n znak równości znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. return 1 średnik. Linia 10. zamknij nawias klamrowy. Linia 12. long a znak równości 0 średnik. Linia 13. long b znak równości 1 średnik. Linia 14. int i znak równości 2 średnik. Linia 16. while otwórz nawias okrągły i ampersant lt średnik znak równości n zamknij nawias okrągły otwórz nawias klamrowy. Linia 17. long suma znak równości a plus b średnik. Linia 18. a znak równości b średnik. Linia 19. b znak równości suma średnik. Linia 20. i znak równości i plus 1 średnik. Linia 21. zamknij nawias klamrowy. Linia 22. return b średnik. Linia 23. zamknij nawias klamrowy otwórz nawias ostrokątny prawy ukośnik code zamknij nawias ostrokątny. Linia 25. zamknij nawias klamrowy.

Słownik

argument funkcji
argument funkcji

element składni w określonym języku programowania, który w wyniku wywołania podprogramu zostaje utożsamiony (skojarzony) z określonym parametrem podprogramu

funkcja typu void
funkcja typu void

funkcja, która nie zwraca żadnej wartości

instrukcja warunkowa
instrukcja warunkowa

element języka programowania sterujący działaniem programu; pozwala wykonać różne instrukcje w zależności od tego, czy zdefiniowane przez programistę wyrażenie logiczne jest prawdziwe czy nieprawdziwe

nieskończona pętla
nieskończona pętla

pętla, która nigdy nie spełnia warunku zakończenia; pętla działająca w nieskończoność

parametr funkcji
parametr funkcji

element składni w określonym języku programowania; umożliwia komunikację pomiędzy podprogramem (funkcją) wywołanym a programem wywołującym; parametry określa się w nagłówku podprogramu (przy jego definicji)

rekurencja
rekurencja

sytuacja, w której funkcja wywołuje samą siebie, aż do napotkania przypadku podstawowego