Black November

ATÉ 50% OFF

TÁ ACABANDO!

0 dias

0 horas

0 min

0 seg

Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Solução para calculo de sequência fibonacci

Espero ter compreendido o objetivo do exercício.

Solução com procedure:

CREATE OR REPLACE PROCEDURE CALCULA_SEQ_FIBONACCI
(
    p_INDICE IN FLOAT
)

AS
    v_N1 FLOAT := 0;
    v_N2 FLOAT := 1;
    v_RESP FLOAT := 0;
    v_COUNT FLOAT := 1;
    v_INDICE FLOAT := p_INDICE;

BEGIN
    CASE 
        WHEN v_INDICE <= 0 THEN RETURN; -- ÍNDICE COMEÇA EM 1
        WHEN v_INDICE = 1 THEN
            DBMS_OUTPUT.PUT_LINE(v_N1); -- NÚM IGUAL A 0
        WHEN v_INDICE > 1 THEN
            DBMS_OUTPUT.PUT_LINE(v_N1); -- NÚM IGUAL A 0
            DBMS_OUTPUT.PUT_LINE(v_N2); -- NÚM IGUAL A 
    ELSE
        DBMS_OUTPUT.PUT_LINE(v_N1);
        DBMS_OUTPUT.PUT_LINE(v_N2);
    END CASE;
    LOOP
        v_RESP := v_N1 + v_N2;
        v_N1 := v_N2;
        v_N2 := v_RESP;
        v_COUNT := v_COUNT + 1;
        DBMS_OUTPUT.PUT_LINE(v_RESP);
    EXIT WHEN v_COUNT >= v_INDICE;
    END LOOP;
END;

Teste da procedure:

SET SERVEROUT ON;
BEGIN
    CALCULA_SEQ_FIBONACCI(45);
END;

Solução com bloco anônimo:

SET SERVEROUTPUT ON;
DECLARE
    v_N1 FLOAT := 0;
    v_N2 FLOAT := 1;
    v_RESP FLOAT := 0;
    v_COUNT FLOAT := 1;
    v_STOP FLOAT := 0;

BEGIN
    DBMS_OUTPUT.PUT_LINE(v_N1);
    DBMS_OUTPUT.PUT_LINE(v_N2);
    LOOP
        v_RESP := v_N1 + v_N2;
        v_N1 := v_N2;
        v_N2 := v_RESP;
        v_COUNT := v_COUNT + 1;
        DBMS_OUTPUT.PUT_LINE(v_RESP);
    EXIT WHEN v_COUNT >= v_STOP;
    END LOOP;
END;

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta
solução!

Oi, Diogenes! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Sua solução para o cálculo da sequência de Fibonacci ficou bem estruturada.

Uma dica interessante para o futuro é utilizar uma função para retornar valores ao invés de apenas exibi-los, caso queira reaproveitar o resultado em outras operações. Veja este exemplo simples em PL/SQL:


CREATE OR REPLACE FUNCTION FIBONACCI(n NUMBER) RETURN NUMBER IS
    a NUMBER := 0;
    b NUMBER := 1;
    temp NUMBER;
BEGIN
    IF n = 0 THEN
        RETURN a;
    ELSIF n = 1 THEN
        RETURN b;
    END IF;

    FOR i IN 2..n LOOP
        temp := a + b;
        a := b;
        b := temp;
    END LOOP;

    RETURN b;
END;

Esse código retorna o n-ésimo número da sequência de Fibonacci, permitindo reutilização em outras partes do programa.

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!