SóProvas


ID
238291
Banca
CESPE / CEBRASPE
Órgão
ABIN
Ano
2010
Provas
Disciplina
Programação
Assuntos

Julgue os itens a seguir, relativos a conceitos de programação
estruturada e de programação orientada a objetos.

Variáveis declaradas internamente a uma função ou procedimento são chamadas variáveis locais e, dependendo da linguagem de programação, possuem duração e escopo limitados à função ou procedimento onde são declaradas. Se uma linguagem de programação define a alocação de variáveis locais de maneira estática, a utilização de recursividade não é possível.

Alternativas
Comentários
  • Se a alocação da variável é estática, quando for chamado a função de forma recursiva, não será possível alocar uma nova variável local. Será usada a variável da chamada anterior pois ela foi definida estaticamente (seu valor persiste entre chamadas recursivas). Neste caso, a recursividade não funciona.

  • Complementando o comentário do Leoh...

    Uma variável quando declarada estática, ela terá sua área de memória compartilhado, portanto só existirá uma unica área de memória.
    Ao entrar na recursividade estará fazendo alteração na mesma área de memória compartilhada, logo não irá funcionar. 
  • Nem com a explicação dos colegas consegui entender. Quer dizer que essa recursão não é possível?

    Retirada de: http://www.ime.usp.br/~pf/algoritmos/aulas/recu.html
                                
  • Geraldo, nesse código não há variável estática, geralmente as variáveis estáticas são declaradas com o nome "static" antes do nome e tipo devariável. por ex; "static int x;"

  • Prezados,

    Vamos analisar a questão em partes. Primeiro, o comando da questão está correto ao afirmar que o escopo e duração de variáveis locais são limitadas a função ou procedimento onde elas são declaradas. Se uma variável é criada dentro de um método, via de regra ela só é acessível dentro desse método. A segunda parte do comando da questão afirma que a recursividade não é possível com variáveis estáticas, e essa parte também é correta. A recursividade significa um método chamar ele mesmo, até resolver a situação proposta, normalmente fazendo isso com alguns cálculos que são atribuidos a variáveis locais, se a variável definida for estática, cada nova chamada do método será manipulado o mesmo valor da variável ( visto que ela seria estática ) , e isso atrapalharia a recursividade.

    Portanto a questão está correta.


  • Prezados,

    Vamos analisar a questão em partes. Primeiro, o comando da questão está correto ao afirmar que o escopo e duração de variáveis locais são limitadas a função ou procedimento onde elas são declaradas. Se uma variável é criada dentro de um método, via de regra ela só é acessível dentro desse método. A segunda parte do comando da questão afirma que a recursividade não é possível com variáveis estáticas, e essa parte também é correta. A recursividade significa um método chamar ele mesmo, até resolver a situação proposta, normalmente fazendo isso com alguns cálculos que são atribuidos a variáveis locais, se a variável definida for estática, cada nova chamada do método será manipulado o mesmo valor da variável ( visto que ela seria estática ) , e isso atrapalharia a recursividade.

  • e se for fazer um backtracking controlado por contador global? o que tem a ver variável estática com recursividade?

    atrapalhar a recursividade != impossibilitar

    como faz falta um bom recurso, agora a gente fica na dúvida e com a pulga atrás da orelha tipo "será que a cespe está certa" e tentando achar pelo em ovo em uma afirmação totalmente desnecessária em um mundo de boas possíveis questões :X

    EDIT: a afirmação está expressamente dita no livro do SEBESTA. Porém, ainda assim, totalmente contraintuitivo pra quem não leu o livro :X