CREATE OR REPLACE PROCEDURE SEQ_FIBONACCI ( P_POSICAO IN NUMBER, P_RESULTADO OUT NUMBER)
IS
V_FIBO1 NUMBER := 0;
V_FIBO2 NUMBER := 1;
V_VALOR NUMBER := 0;
V_POSICAO NUMBER:=2;
BEGIN
IF P_POSICAO < 1 THEN
dbms_output.put_line('ERRO - POSICAO MENOR QUE 1');
ELSIF P_POSICAO = 1 THEN
dbms_output.put_line('PRIMEIRO ELEMENTO DO FIBONACCI É 0');
ELSE
IF P_POSICAO = 2 THEN
V_VALOR :=1;
ELSE
V_POSICAO := 3;
LOOP
V_VALOR := v_fibo1 + v_fibo2;
v_fibo1 := v_fibo2;
v_fibo2 := v_valor;
v_posicao := v_posicao + 1;
EXIT WHEN V_POSICAO > P_POSICAO;
END LOOP;
END IF;
END IF;
IF P_POSICAO < 1 THEN
P_RESULTADO := NULL;
ELSE
p_resultado := v_valor;
END IF;
END;
------ EXECUÇÃO DA PROCEDURE ------------
SET SERVEROUTPUT ON;
DECLARE
v_valor NUMBER;
BEGIN
-- Teste para F(10)
seq_fibonacci(10, v_valor);
DBMS_OUTPUT.PUT_LINE('F(10) = ' || v_valor);
-- Teste para F(2)
seq_fibonacci(2, v_valor);
DBMS_OUTPUT.PUT_LINE('F(2) = ' || v_valor);
-- Teste para F(3)
seq_fibonacci(3, v_valor);
DBMS_OUTPUT.PUT_LINE('F(3) = ' || v_valor);
-- Teste para F(4)
seq_fibonacci(4, v_valor);
DBMS_OUTPUT.PUT_LINE('F(4) = ' || v_valor);
-- Teste para F(45)
seq_fibonacci(45, v_valor);
DBMS_OUTPUT.PUT_LINE('F(45) = ' || v_valor);
END;
/
------- SAÍDA DO SCRIPT ----------------
F(45) = 701408733 ** ERRO ---** DIFERENTE DA RESPOSTA NO CURSO.
- F(10) = 34 -- CERTO
- F(2) = 1 --- CERTO
- F(3) = 1 --- CERTO
- F(4) = 2 --- CERTO
------ CALCULO FIBONACCI (BY CHATGPT) ----------------
Cálculo da Sequência de Fibonacci
F(1)=0
F(2)=1
F(3)=F(2)+F(1)=1+0=1
F(4)=F(3)+F(2)=1+1=2
F(5)=F(4)+F(3)=2+1=3
F(6)=F(5)+F(4)=3+2=5
F(7)=F(6)+F(5)=5+3=8
F(8)=F(7)+F(6)=8+5=13
F(9)=F(8)+F(7)=13+8=21
F(10)=F(9)+F(8)=21+13=34
F(11)=F(10)+F(9)=34+21=55
F(12)=F(11)+F(10)=55+34=89
F(13)=F(12)+F(11)=89+55=144
F(14)=F(13)+F(12)=144+89=233
F(15)=F(14)+F(13)=233+144=377
F(16)=F(15)+F(14)=377+233=610
F(17)=F(16)+F(15)=610+377=987
F(18)=F(17)+F(16)=987+610=1597
F(19)=F(18)+F(17)=1597+987=2584
F(20)=F(19)+F(18)=2584+1597=4181
F(21)=F(20)+F(19)=4181+2584=6765
F(22)=F(21)+F(20)=6765+4181=10946
F(23)=F(22)+F(21)=10946+6765=17711
F(24)=F(23)+F(22)=17711+10946=28657
F(25)=F(24)+F(23)=28657+17711=46368
F(26)=F(25)+F(24)=46368+28657=75025
F(27)=F(26)+F(25)=75025+46368=121393
F(28)=F(27)+F(26)=121393+75025=196418
F(29)=F(28)+F(27)=196418+121393=317811
F(30)=F(29)+F(28)=317811+196418=514229
F(31)=F(30)+F(29)=514229+317811=832040
F(32)=F(31)+F(30)=832040+514229=1346269
F(33)=F(32)+F(31)=1346269+832040=2178309
F(34)=F(33)+F(32)=2178309+1346269=3524578
F(35)=F(34)+F(33)=3524578+2178309=5702887
F(36)=F(35)+F(34)=5702887+3524578=9227465
F(37)=F(36)+F(35)=9227465+5702887=14930352
F(38)=F(37)+F(36)=14930352+9227465=24157817
F(39)=F(38)+F(37)=24157817+14930352=39088169
F(40)=F(39)+F(38)=39088169+24157817=63245986
F(41)=F(40)+F(39)=63245986+39088169=102334155
F(42)=F(41)+F(40)=102334155+63245986=165580141
F(43)=F(42)+F(41)=165580141+102334155=267914296
F(44)=F(43)+F(42)=267914296+165580141=433494437
F(45)=F(44)+F(43)=433494437+267914296=1134903170