Os artigos da Wikipedia são avançados demais para eu entender. Alguém poderia me dar uma explicação simples, por favor?
terminology
recursion
skullpatrol
fonte
fonte
recursion
refere-se a uma função que se chama enquanto queself-reference
se refere a um objeto que se refere a si mesmo.Respostas:
O contexto dos dois termos é geralmente diferente.
A auto-referência está no contexto dos dados - você tem um tipo de dados que contém uma referência a algo do mesmo tipo.
A recursiva está no contexto do código - você tem uma função ou procedimento que se chama.
Exemplo:
fonte
Aqui está uma função recursiva (em C):
Essas duas chamadas para
fibonacci()
dentro dafibonacci()
função são chamadas recursivas .Aqui está uma estrutura de dados auto-referencial :
O primeiro elemento,,
data
é apenas um ponteiro para algum tipo de dado. O segundo elemento,,next
é um ponteiro para outraListNode
estrutura. Se você tiver duas ou maisListNode
estruturas, poderá definir onext
ponteiro de uma para o endereço de outra, e assim por diante, e então terá uma lista vinculada . A estrutura é auto-referencial porque a definição da estrutura se refere a si mesma. Se você quiser ficar realmente louco, você pode fazer o seguinte:Agora você tem um tipo diferente de auto-referência - não é apenas a definição
struct ListNode
que se refere a si mesma ... você definiu onext
ponteironode
para apontar paranode
si mesmo. Esta é uma lista vinculada circular que contém apenas um elemento. Bonito, mas não muito útil. Menciono isso porque é um tipo de auto-referência, mas não é o que as pessoas geralmente querem dizer quando falam sobre tipos de dados auto-referenciais.fonte
Espera-se que as recursões, principalmente as úteis, sejam encerradas após certo número de procedimentos, no sentido de que há algum valor inicial. a menos que você tenha uma recursão ruim que é inútil.
As auto-referências, por si só, não são exatamente recursões, mas podem ser mostradas como recursivas, caso em que geralmente nunca terminam.
fonte
Recursão implica ação.
Exemplos:
Tecnicamente, a recursão deve ter um estado de saída, mas não é um requisito.
A auto-referência implica estrutura.
Ex. Um método de instância que faz referência ao objeto ao qual está anexado.
fonte
A recursão requer algo para processar através da chamada do mesmo processo (geralmente com parâmetros diferentes). Mesmo que você frequentemente use funções e essas funções se autodenominam, elas tecnicamente entram em uma nova etapa que, por acaso, parece com o local de onde elas vieram.
Auto-referência significa que algo se refere a si mesmo. As classes podem ser autorreferenciais usando
this
, mas isso não é significativamente recursivo.fonte