-
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/