Você está na página 1de 10

Funes

- Recursividade (continuao) Ainda podemos definir uma funo recursiva que implemente a operao de multiplicao com base na operao de adio: int multiplicar (int A, int B) { if (!B) return (0); else return ( A + multiplicar (A, B-1) ); }
319

Funes - Recursividade (continuao)


Para uma melhor compreenso do que foi apresentado, devemos nos recordar do conceito de parmetros formais e definirmos o que vem a ser registro de ativao. O registro de ativao uma rea de memria que guarda informaes referentes ao estado atual de uma funo: - valor dos parmetros formais; - valor das variveis locais; - valor do contador de programa (PC); - etc.
320

Funes

- Recursividade (continuao) Sempre que uma funo chama outra funo o registro de ativao da funo invocadora salvo e um novo registro de ativao criado para a funo invocada. Este processo conhecido como salvamento e troca de contexto e pode ser melhor compreendido se o aplicarmos sobre um programa que se utilize da funo recursiva multiplicar definida anteriormente.
321

#include <stdio.h> int multiplicar (int A, int B); int main() { int a, b, resp; printf("\nMultiplicando: "); scanf("%d", &a); printf("\nMultiplicador: "); scanf("%d", &b); resp = multiplicar (a, b); printf("\n%d * %d = %d\n",a,b,resp); return 0; } int multiplicar (int A, int B) { if (!B) return (0); else return ( A + multiplicar (A, B-1) ); } 322

Funes - Recursividade (continuao)


A execuo de todo programa escrito na linguagem C comea pela execuo da funo main(). Logo, o registro de ativao desta funo gerado, nele so armazenados (no caso do nosso exemplo) os valores das variveis locais a, b e resp, e a informao de qual instruo da respectiva funo encontra-se sendo executa. O programa segue sua execuo at que na linha resp = multiplicar (a, b); efetuada uma chamada a funo multiplicar. Neste ,momento o registro de ativao da funo main() salvo (para posteriormente o contexto atual poder ser restaurado) e um novo registro de ativao gerado para armazenar informaes referentes a funo multiplicar. 323

Funes - Recursividade (continuao)


O registro de ativao da funo multiplicar conter os valores armazenados nas variveis locais A e B, e a informao de qual instruo da respectiva funo encontra-se sendo executa. A primeira instruo do corpo da funo multiplicar() uma instruo condicional, a qual verificar se a funo multiplicar deve ou no chamar a si mesma, caso esta verificao resulte em falso, o registro de ativao da funo multiplicar, atualmente sendo executada, ser salvo e um novo registro de ativao ser criado para a nova instncia da funo multiplicar(), este processo se dar at que a funo multiplicar deixe de chamar a si mesma.
324

Funes
- Recursividade (continuao) Com base no que foi exposto, podemos compreender uma das desvantagens da utilizao de recursividade, que seria? O consumo de memria necessrio para a troca de contexto. Exerccio: Para uma melhor compreenso do conceito de recursividade faa agora uma funo recursiva, na linguagem C, para calcular o fatorial de um nmero natural e construa um programa que a utilize. 325

Funes
Um outro exemplo muito utilizado de problema que possui uma definio recursiva a gerao srie de Fibonacci: {0,1,1,2,3,5,8,13,21,34, } Uma funo recursiva que recebe a posio do elemento na srie e retorna seu valor : unsigned int fibonacci(unsigned int i) { if (i==1) return 0; if (i==2) return 1; return (fibonacci(i-1) + fibonacci(i-2)) } 327

Funes
Fora o problema do consumo de memria, gerado pela troca de contexto na recurso, qual seria outro problema proveniente da recurso evidenciado na funo recursiva apresentada para o clculo do valor de um elemento da srie de Fibonacci com base na sua posio? O clculo do mesmo valor n vezes.
fibonacci(5) fibonacci(4) fibonacci(3) + fibonacci(2) fibonacci(2) + fibonacci(1)
328

fibonacci(3) fibonacci(2) + fibonacci(1)

Funes
Mesmo problemas que possuem uma definio recursiva sempre podem ser solucionados de forma imperativa. Um exemplo disso o clculo do valor de um elemento da srie de Fibonacci com base na sua posio imperativo atravs da funo abaixo:
unsigned int fibonacci(unsigned int i) { if (i==1) return 0; if (i==2) return 1; else { unsigned int a, b; for(a=0, b=1; i-2; b+=a,a=b-a,i--); return b; } 329}

Você também pode gostar

  • Comput Graf02 Rev Mat Atual2019
    Comput Graf02 Rev Mat Atual2019
    Documento15 páginas
    Comput Graf02 Rev Mat Atual2019
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Tipos de Barramento
    Tipos de Barramento
    Documento3 páginas
    Tipos de Barramento
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Comput Graf03 Cores
    Comput Graf03 Cores
    Documento34 páginas
    Comput Graf03 Cores
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Comput Graf04 Prim Graficas
    Comput Graf04 Prim Graficas
    Documento36 páginas
    Comput Graf04 Prim Graficas
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Comput Graf03 Rep Img hw2
    Comput Graf03 Rep Img hw2
    Documento40 páginas
    Comput Graf03 Rep Img hw2
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Eltetrônica Digital
    Eltetrônica Digital
    Documento56 páginas
    Eltetrônica Digital
    James Concursado
    Ainda não há avaliações
  • Comput Graf04 Prim Graficas
    Comput Graf04 Prim Graficas
    Documento36 páginas
    Comput Graf04 Prim Graficas
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Elet0051 - Aula 9 - Luminotécnica - Parte 2 - 07 - 07 - 2016
    Elet0051 - Aula 9 - Luminotécnica - Parte 2 - 07 - 07 - 2016
    Documento26 páginas
    Elet0051 - Aula 9 - Luminotécnica - Parte 2 - 07 - 07 - 2016
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Computação Gráfica - 01
    Computação Gráfica - 01
    Documento42 páginas
    Computação Gráfica - 01
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Aulas Memória 1
    Aulas Memória 1
    Documento28 páginas
    Aulas Memória 1
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Comput Graf05 Sist Refer Tranf Geom
    Comput Graf05 Sist Refer Tranf Geom
    Documento39 páginas
    Comput Graf05 Sist Refer Tranf Geom
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Comput Graf05 Sist Refer Tranf Geom
    Comput Graf05 Sist Refer Tranf Geom
    Documento39 páginas
    Comput Graf05 Sist Refer Tranf Geom
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Pcom Slide01
    Pcom Slide01
    Documento28 páginas
    Pcom Slide01
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Aula 20
    Aula 20
    Documento26 páginas
    Aula 20
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • 6CN Sistemas Parte1
    6CN Sistemas Parte1
    Documento64 páginas
    6CN Sistemas Parte1
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • 7CN Interpolacao Parte1
    7CN Interpolacao Parte1
    Documento24 páginas
    7CN Interpolacao Parte1
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Aula 10 Gerador
    Aula 10 Gerador
    Documento40 páginas
    Aula 10 Gerador
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Aula 4 GTD
    Aula 4 GTD
    Documento16 páginas
    Aula 4 GTD
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Aula 9 - Usina de Energia Elétrica
    Aula 9 - Usina de Energia Elétrica
    Documento11 páginas
    Aula 9 - Usina de Energia Elétrica
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Estrutura de Dados
    Estrutura de Dados
    Documento34 páginas
    Estrutura de Dados
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Matemática Discreta
    Matemática Discreta
    Documento19 páginas
    Matemática Discreta
    Curso Raízes
    Ainda não há avaliações
  • 7CN Interpolacao Parte2
    7CN Interpolacao Parte2
    Documento28 páginas
    7CN Interpolacao Parte2
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • 8CN Integracao
    8CN Integracao
    Documento26 páginas
    8CN Integracao
    Jesus Campos
    Ainda não há avaliações
  • Matemática Discreta
    Matemática Discreta
    Documento19 páginas
    Matemática Discreta
    Curso Raízes
    Ainda não há avaliações
  • Mat Disc Parte08
    Mat Disc Parte08
    Documento16 páginas
    Mat Disc Parte08
    Társis Teixeira
    Ainda não há avaliações
  • Mat Disc Parte04
    Mat Disc Parte04
    Documento16 páginas
    Mat Disc Parte04
    Carlos Braia
    Ainda não há avaliações
  • Mat Disc Parte07
    Mat Disc Parte07
    Documento24 páginas
    Mat Disc Parte07
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Mat Disc Parte06
    Mat Disc Parte06
    Documento10 páginas
    Mat Disc Parte06
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Mat Disc Parte09
    Mat Disc Parte09
    Documento11 páginas
    Mat Disc Parte09
    Ramon Luiz Santos Gonçalves
    Ainda não há avaliações
  • Mat Disc Parte10
    Mat Disc Parte10
    Documento41 páginas
    Mat Disc Parte10
    rondon05
    Ainda não há avaliações