SóProvas


ID
2909980
Banca
UFSC
Órgão
UFSC
Ano
2019
Provas
Disciplina
Algoritmos e Estrutura de Dados
Assuntos

A respeito de um algoritmo recursivo, analise as afirmativas abaixo e assinale a alternativa correta.


I. Deve conter pelo menos uma estrutura de repetição.

II. Deve conter pelo menos uma estrutura de seleção.

III. Deve invocar a si mesmo pelo menos uma vez ao ser executado.

Alternativas
Comentários
  • Gabarito B

    Uma função recursiva chama a si mesma dentro do próprio escopo. Pode ser uma recursão direta onde uma função A chama a própria função A ou uma recursão indireta onde uma função A chama uma função B que por sua vez chama a função A. Além de chamar a si mesma, a função recursiva deve possuir uma condição de parada que a impedirá de entrar em loop infinito.

    Antes de criar uma função recursiva para determinado problema, é preciso saber se ele possui uma estrutura recursiva. Neste caso, devemos verificar se parte do problema possui o mesmo tipo do original, assim podemos dizer que a solução para ele é a recursividade. Para compreender melhor, vamos analisar o caso do somatório onde temos um número natural n >= 0 e queremos descobrir a soma de todos os números de n até 0.

    "Retroceder Nunca Render-se Jamais !"

    Força e Fé !

    Fortuna Audaces Sequitur !

  • Alternativa correta: B.

    Ele precisa de pelo menos uma estrutura de seleção (switch, else ou if) para poder determinar quando parar a recursividade. Se não tiver isso ele entra em loop. Por exemplo:

    if (i > 0) then <chama a si mesmo novamente>

    else <sai da recursividade>

  • Fiquei na dúvida entre letra B e E. Acabei errando. Depois pensando melhor, acredito que a 3ª afirmação deva estar incorreta porque um algoritmo pode ser recursivo e ter uma chamada para ele mesmo em seu escopo, no entanto, pode terminar de executar sem realizar esta chamada. É o caso por exemplo de um algoritmo fatorial recursivo, que invocará a si mesmo várias vezes quando for calculado o fatorial de um inteiro maior que 1, no entanto, não invocará a si mesmo nenhuma vez quando for calculado o fatorial de 1.

  • Ainda não entendi porque a terceira alternativa está errada...

  • O erro da terceira alternativa é porque existe a recursividade indireta, na qual uma função A chama uma função B, posteriormente a função B chama a função A, ou seja, a função A não precisou chamar a si mesma, mas ainda assim houve recursividade.

  • Força Guerreiro!!!!!!

  • Introdução:

    • Recursão: quando aquilo chama a si mesmo. Em lógica de programação  processo de repetição de uma rotina. Preste atenção a palavra negritada "rotina", pois ela será muito importante.
    • Instruções em lógicas de programação:

    a) Decisão ou seleção: Escolha. Ela se subdivide em (1) simples (if), (2) composta (if, else) e (3) caso selecione (switch-case)

    b) Repetição: estrutura que permite executar mais de uma vez. Subdivisões: pré-testada (while), pós-teste (do while), variável de controle (for) e e a instrução permite executar uma função em cada elemento (for each).

    Vamos a questão:

    I Deve conter pelo menos uma estrutura de repetição. Maldade essa alternativa de número 1 kk. Tanto a recursão, quanto a repetição usam a repetição. Porém a recursão não precisa necessariamente usar as 4 estruturas básicas existentes de repetição. Por isso ela está errada. E como a recursão é feita? R.: a recursão usa a repetição na forma de chamadas repetitivas a uma rotina.

    II Deve conter pelo menos uma estrutura de seleção. Quando eu me deparei com a questão, eu fiz a seguinte indagação: “já que a chamada é para cair em uma rotina, para que usarei uma estrutura de seleção?”. A resposta é simples: loop. Veja o que o livro Projeto de Algoritmos de Nivio Ziviani diz: “como todo comando repetitivo, métodos recursivos introduzem a possibilidade de iterações que podem não terminar, implicando a necessidade de se considerar o problema de terminação. Uma exigência fundamental é que a chamada recursiva a um método P esteja sujeita a uma condição B, a qual se torna não satisfeita em algum momento da computação...”.

    III Deve invocar a si mesmo pelo menos uma vez ao ser executado. Como já bem explicado pelos colegas. Existe a recursão direta e a indireta. Reforçarei a explicação por analogia, Direta: quando a estrutura chama a si mesmo (exemplo um grito em uma caverna). Indireta é quando você chama o seu colega e ele chama outro colega, em termos mais técnicos "Recursão Indireta uma rotina que contém uma chamada a outra rotina que, por sua vez, tem uma chamada a outra rotina e assim sucessivamente, portanto, rotinas diferentes".

    Obs.: leiam o comentário dos coelgas Leophb e Ibsen para maiores esclarecimentos.

    Fonte:

    ZIVIANI Nivio. Projeto de Algoritmos com implementação em Java e C++. Editora Thomson. Ano de publicação: 2007.

    Recursividade https://www.embarcados.com.br/recursividade/