SlideShare uma empresa Scribd logo
1 de 61
Baixar para ler offline
Recursividade
Prof. Sérgio Souza Costa
Recursividade
• Muitas estruturas de dados como listas e árvores são
recursivas, então é importante compreender
conceito de recursividade.

*
Recursividade
▪

A recursividade é uma forma de resolver problemas por meio da divisão
dos problemas em problemas menores de mesma natureza.

▪

Se a natureza dos subproblemas é a mesma do problema, o mesmo
método usado para reduzir o problema pode ser usado para reduzir os
subproblemas e assim por diante.

▪

Quando devemos parar? Quando alcançarmos um caso trivial que
conhecemos a solução.

*
Recursividade
• Exemplos de casos triviais:
–
–
–
–
–

Qual o fatorial de 0 ?
Quanto é um dado X multiplicado por 1 ?
Quanto é um dado X multiplicado por 0 ?
Quanto é um dado X elevado a 1 ?
Quantos elementos tem em uma lista vazia?
Recursividade
Assim, um processo recursivo para a solução de um
problema consiste em duas partes:

▪
▪
▪

▪

▪

O caso trivial, cuja solução é conhecida;
Um método geral que reduz o problema a um ou mais
problemas menores (subproblemas) de mesma
natureza.

Muitas funções podem ser definidas
recursivamente. Para isso, é preciso identificar as
duas partes acima.
Exemplo: fatorial de um número e o n-ésimo termo
da seqüência de Fibonacci.
*
Função fatorial
▪

A função fatorial de um inteiro não negativo pode
ser definida como:

▪

Esta definição estabelece um processo recursivo
para calcular o fatorial de um inteiro n.
Caso trivial: n=0.
Método geral: n x (n-1)!.

▪
▪

*
Função fatorial
▪

Assim, usando-se este processo recursivo, o cálculo
de 4!, por exemplo, é feito como a seguir:

4! =

*
Função fatorial
▪

Assim, usando-se este processo recursivo, o cálculo
de 4!, por exemplo, é feito como a seguir:

4! = 4 * 3!

*
Função fatorial
▪

Assim, usando-se este processo recursivo, o cálculo
de 4!, por exemplo, é feito como a seguir:

4! = 4 * 3!
= 4 * (3 * 2!)
Função fatorial
▪

Assim, usando-se este processo recursivo, o cálculo
de 4!, por exemplo, é feito como a seguir:

4! = 4 * 3!
= 4 * (3 * 2!)
= 4 * (3 * (2 * 1!))
Função fatorial
▪

Assim, usando-se este processo recursivo, o cálculo
de 4!, por exemplo, é feito como a seguir:

4! = 4 * 3!
= 4 * (3 * 2!)
= 4 * (3 * (2 * 1!))
= 4 * (3 * (2 * (1 * 0!)))
Função fatorial
▪

Assim, usando-se este processo recursivo, o cálculo
de 4!, por exemplo, é feito como a seguir:

4! = 4 * 3!
= 4 * (3 * 2!)
= 4 * (3 * (2 * 1!))
= 4 * (3 * (2 * (1 * 0!)))
= 4 * (3 * (2 * (1 * 1)))
Função fatorial
▪

Assim, usando-se este processo recursivo, o cálculo
de 4!, por exemplo, é feito como a seguir:

4! = 4 * 3!
= 4 * (3 * 2!)
= 4 * (3 * (2 * 1!))
= 4 * (3 * (2 * (1 * 0!)))
= 4 * (3 * (2 * (1 * 1)))
= 4 * (3 * (2 * 1))
Função fatorial
▪

Assim, usando-se este processo recursivo, o cálculo
de 4!, por exemplo, é feito como a seguir:

4! = 4 * 3!
= 4 * (3 * 2!)
= 4 * (3 * (2 * 1!))
= 4 * (3 * (2 * (1 * 0!)))
= 4 * (3 * (2 * (1 * 1)))
= 4 * (3 * (2 * 1))
= 4 * (3 * 2)
Função fatorial
▪

Assim, usando-se este processo recursivo, o cálculo
de 4!, por exemplo, é feito como a seguir:

4! = 4 * 3!
= 4 * (3 * 2!)
= 4 * (3 * (2 * 1!))
= 4 * (3 * (2 * (1 * 0!)))
= 4 * (3 * (2 * (1 * 1)))
= 4 * (3 * (2 * 1))
= 4 * (3 * 2)
=4*6
Função fatorial
▪

Assim, usando-se este processo recursivo, o cálculo
de 4!, por exemplo, é feito como a seguir:

4! = 4 * 3!
= 4 * (3 * 2!)
= 4 * (3 * (2 * 1!))
= 4 * (3 * (2 * (1 * 0!)))
= 4 * (3 * (2 * (1 * 1)))
= 4 * (3 * (2 * 1))
= 4 * (3 * 2)
=4*6
= 24

Mas como uma função recursiva
é de fato implementada no
computador?
Usando-se o mecanismo conhecido como
Pilha de Execução!
*
Função fatorial
▪

Considere, novamente, o exemplo para 4!:

Pilha de Execução

fatorial(4)

-> return 4*fatorial(3)
*
Função fatorial
▪

Considere, novamente, o exemplo para 4!:

Pilha de Execução

fatorial(3)

-> return 3*fatorial(2)

fatorial(4)

-> return 4*fatorial(3)
*
Função fatorial
▪

Considere, novamente, o exemplo para 4!:

Pilha de Execução

fatorial(2)

-> return 2*fatorial(1)

fatorial(3)

-> return 3*fatorial(2)

fatorial(4)

-> return 4*fatorial(3)
*
Função fatorial
▪

Considere, novamente, o exemplo para 4!:

Pilha de Execução

fatorial(1)

-> return 1*fatorial(0)

fatorial(2)

-> return 2*fatorial(1)

fatorial(3)

-> return 3*fatorial(2)

fatorial(4)

-> return 4*fatorial(3)
*
Função fatorial
▪

Considere, novamente, o exemplo para 4!:

Pilha de Execução

fatorial(0)
fatorial(1)

-> return 1 (caso trivial)
-> return 1*fatorial(0)

fatorial(2)

-> return 2*fatorial(1)

fatorial(3)

-> return 3*fatorial(2)

fatorial(4)

-> return 4*fatorial(3)
*
Função fatorial
▪

Considere, novamente, o exemplo para 4!:

Pilha de Execução
Desempilha fatorial(0)
fatorial(0)
fatorial(1)

-> return 1 (caso trivial)
-> return 1*fatorial(0)

fatorial(2)

-> return 2*fatorial(1)

fatorial(3)

-> return 3*fatorial(2)

fatorial(4)

-> return 4*fatorial(3)
*
Função fatorial
▪

Considere, novamente, o exemplo para 4!:

Desempilha fatorial(1)
fatorial(1)

-> return 1*1

fatorial(2)

-> return 2*fatorial(1)

fatorial(3)
fatorial(4)

-> return 3*fatorial(2)
-> return 4*fatorial(3)
*
Função fatorial
▪

Considere, novamente, o exemplo para 4!:

Desempilha fatorial(2)
fatorial(2)

-> return 2*1*1

fatorial(3)

-> return 3*fatorial(2)

fatorial(4)

-> return 4*fatorial(3)
*
Função fatorial
▪

Considere, novamente, o exemplo para 4!:

Desempilha fatorial(3)
fatorial(3)

-> return 3*2*1*1

fatorial(4)

-> return 4*fatorial(3)
*
Função fatorial
▪

Considere, novamente, o exemplo para 4!:

Desempilha fatorial(4)
fatorial(4)

-> return 4*3*2*1*1
*
Função fatorial
▪

Considere, novamente, o exemplo para 4!:

Resultado = 24

*
Recursividade
"Para fazer um procedimento recursivo é preciso ter fé.”
prof. Siang Wun Song

*
Recursividade
"Para fazer um procedimento recursivo é preciso ter fé.”
prof. Siang Wun Song

"Ao tentar resolver o problema, encontrei obstáculos dentro de obstáculos. Por
isso, adotei uma solução recursiva.” Aluno S.Y., 1998

*
Recursividade
"Para fazer um procedimento recursivo é preciso ter fé.”
prof. Siang Wun Song

"Ao tentar resolver o problema, encontrei obstáculos dentro de obstáculos. Por
isso, adotei uma solução recursiva.” Aluno S.Y., 1998

"To understand recursion, we must first understand recursion.” —anônimo

*
Funções recursivas
• Base do paradigma funcional.
– ○ Lisp, Haskell, Miranda, F#, Scheme, Erland
– Influenciou diversas: JavaScript, Python,Ruby, Lua

• Presente em praticamente todas as linguagens,
mesmo as imperativas, como
– C, Java, Pascal, ADA ...

*
Funções recursivas
• Muitos algoritmos complexos são resolvidos através
de soluções recursivas
– Quick-sort (ordenação rápida)
– Ordenação por intercalação (merge sort)
– Busca binária

• Muitas estruturas de dados são recursivas
– Listas encadeadas
– Árvores binárias, n-árias ...

• Tendem a gerar códigos menores

*
Recursividade - Natureza

*
Recursividade - Natureza

*
Vamos fazer mais um
exercício. Na atividade de
aprofundamento tem mais
exercícios. Tentem fazer e
postem suas dúvidas.
Exercício resolvido
• Codifiquem uma função que multiplica um dado
inteiro “a” por um inteiro “b”, usando somas
sucessivas. Exemplo:
• 4 * 3 = 3+ 3+ 3 +3 = 12
Exercício resolvido
int mult (int a, int b) {

}
Exercício resolvido
int mult (int a, int b) {
if (a == 0)
return

}
Exercício resolvido
int mult (int a, int b) {
if (a == 0)
return 0;

}
Exercício resolvido
int mult (int a, int b) {
if (a == 0)
return 0;
if (a == 1)
return
}
Exercício resolvido
int mult (int a, int b) {
if (a == 0)
return 0;
if (a == 1)
return b;
}
Exercício resolvido
int mult (int a, int b) {
if (a == 0)
return 0;
if (a == 1)
return b;
return b + mult (a-1,b);
}
Vamos testar ?
Vamos testar ?
mult (3,5)
Vamos testar ?
mult(3,5)=5+mult(2,5)
Vamos testar ?
mult(3,5)=5+mult(2,5)
=5+5+mult(1,5)
Vamos testar ?
mult(3,5)=5+mult(2,5)
=5+5+mult(1,5)
=5+5+5
Vamos testar ?
mult(3,5)=5+mult(2,5)
=5+5+mult(1,5)
=5+5+5
= 15
Exercícios
1. Faça uma função recursiva que calcula a divisão usando subtrações
sucessivas
int div (int a, int b);
2. Faça uma função recursiva que calcula o resto de uma divisão usando
subtrações sucessivas.
int mod (int a, int b);
3.Faça uma função recursiva que calcula a potencia de um numero usando
multiplicações sucessivas.
int pot (int base, int exp);
4. Faça uma função recursiva que calcula a quantidade de caracteres em uma
string.
int tamanho (char *str)
5. Fazer uma função recursiva que calcule o valor da série S descrita a seguir
para um valor n > 0 a ser fornecido como parâmetro para a mesma:
S = 1 + 1/2! + 1/3! + ... 1/n!
Tipos Recursivos
Um tipo recursivo é definido em termos de si.
Exemplos de tipos recursivos:
● listas
● árvores
A cardinalidade de tipos recursivos é infinita.
Os números naturais é outro exemplo de tipos recursivos
Axiomas de Peano
O matemático Giuseppe Peano (1858-1932) apresentou alguns axiomas sobre números
naturais, que ficaram posteriormente conhecidos como os Axiomas de Peano. Nele
precisamos admitir três conceitos primitivos. São eles: zero (denotado por 0), número
natural e a noção de sucessor de um número natural. Estes axiomas são listados abaixo:
(A1) 0 (zero) é um número natural e não é sucessor de
um número natural2.
(A2) Todo número natural tem um único sucessor,
que também é um número natural.
(A3) Se dois números naturais tem o mesmo sucessor,
então eles são iguais entre si.
(A4) Se um subconjunto S dos números naturais
possui o elemento zero e também o sucessor de todos
os elementos de S, então S é igual ao conjunto dos
números naturais.
Tipos Recursivos - Naturais
Exemplos:
0 -> Zero
Tipos Recursivos - Naturais
Exemplos:
0 -> Zero
1 -> Succ (Zero)
Tipos Recursivos - Naturais
Exemplos:
0 -> Zero
1 -> Succ (Zero)
2- > Succ ( Succ (Zero))
Tipos Recursivos - Naturais
Exemplos:
0 -> Zero
1 -> Succ (Zero)
2- > Succ ( Succ (Zero))
3- > Succ ( Succ ( Succ (Zero)))
...
Numeros Naturais
typedef struct Nat {
struct Nat* ant;
}* Nat;

Definição da estrutura. Observe a
recursão.

Função que define o Zero
Nat Zero () {
return NULL;
}
Nat Succ (Nat a) {
Nat n = malloc (sizeof (Nat));
Função que retorna o
n->ant = a;
sucessor de um dado a.
return n;
}
Função que retorna o
Nat ant (Nat a) {
antecessor de um dado
return a->ant;
a.
}
Numeros Naturais
typedef struct Nat {
struct Nat* ant;
}* Nat;

Definição da estrutura. Observe a
recursão.

Função que define o Zero
Nat Zero () {
return NULL;
}
Nat Succ (Nat a) {
Nat n = malloc (sizeof (Nat));
Função que retorna o
n->ant = a;
sucessor de um dado a.
return n; Em C, ponteiros é o
}
recurso que nos
Função que retorna o
Nat ant (Nat a) {
permite definir tipos
antecessor de um dado
return a->ant;
recursivos
a.
}
Numeros Naturais
Se b é o número 1, então a + b é definido como sucessor de a. Por
outro lado, se b fosse 2, a + b seria definido como sucessor de a + 1.
Ou seja, a + c é o sucessor de a + b, onde b é o antecessor de c. Isso
pode ser descrito na seguinte função:
Nat sum (Nat
if (c ==
return
else {
return
}
}

a, Nat c) {
Zero () )
a;
Succ ( sum

(a, ant(c)));
Numeros Naturais
A multiplicação pode ser definida em termos de soma
sucessivas.

Nat mult (Nat a, Nat b) {
if (a == Zero () )
return Zero ();
else
return sum (b, (mult (b, ant(a))));
}
Numeros Naturais
A multiplicação pode ser definida em termos de soma
sucessivas.

Nat mult (Nat a, Nat b) {
if (a == Zero () )
return Zero ();
else
return sum testem o
Baixem e (b, (mult (b, ant(a))));
}
código.
Atividade
1. Codifiquem a divisão inteira.
2. Codifiquem a função que retorna o resto de uma divisão
inteira, ou seja, equivalente ao operador %.

Mais conteúdo relacionado

Mais procurados

Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisFabrício Lopes Sanchez
 
Lista de exercícios em portugol
Lista de exercícios em portugolLista de exercícios em portugol
Lista de exercícios em portugolGabriel Faustino
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação CGercélia Ramos
 
Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1Pacc UAB
 
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaExercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaLoiane Groner
 
Introdução a Banco de Dados (Parte 2)
Introdução a Banco de Dados (Parte 2)Introdução a Banco de Dados (Parte 2)
Introdução a Banco de Dados (Parte 2)Mario Sergio
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidosGleydson Sousa
 
Sistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockSistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockWellington Oliveira
 
Capítulo 6 Sistemas Operacionais Modernos
Capítulo 6 Sistemas Operacionais ModernosCapítulo 6 Sistemas Operacionais Modernos
Capítulo 6 Sistemas Operacionais ModernosWellington Oliveira
 
Pesquisa e Ordenação - Aula 07 - Métodos de Ordenação (Bin sort - Bucket sort)
Pesquisa e Ordenação - Aula 07 - Métodos de Ordenação (Bin sort - Bucket sort)Pesquisa e Ordenação - Aula 07 - Métodos de Ordenação (Bin sort - Bucket sort)
Pesquisa e Ordenação - Aula 07 - Métodos de Ordenação (Bin sort - Bucket sort)Leinylson Fontinele
 
Apresentação 20130805 algoritmos
Apresentação 20130805 algoritmos Apresentação 20130805 algoritmos
Apresentação 20130805 algoritmos João moreira
 

Mais procurados (20)

Aula 07 - Visualg e Pseudocódigo
Aula 07 - Visualg e PseudocódigoAula 07 - Visualg e Pseudocódigo
Aula 07 - Visualg e Pseudocódigo
 
Modelação de Dados
Modelação de DadosModelação de Dados
Modelação de Dados
 
Algoritmo 06 - Array e Matrizes
Algoritmo 06 - Array e MatrizesAlgoritmo 06 - Array e Matrizes
Algoritmo 06 - Array e Matrizes
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
 
Lista de exercícios em portugol
Lista de exercícios em portugolLista de exercícios em portugol
Lista de exercícios em portugol
 
Visualg
VisualgVisualg
Visualg
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
 
Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1Aula 7 - Repetição enquanto - parte 1
Aula 7 - Repetição enquanto - parte 1
 
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaExercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
 
Introdução a Banco de Dados (Parte 2)
Introdução a Banco de Dados (Parte 2)Introdução a Banco de Dados (Parte 2)
Introdução a Banco de Dados (Parte 2)
 
SI - Comunicação
SI - ComunicaçãoSI - Comunicação
SI - Comunicação
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidos
 
Sistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockSistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 Deadlock
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
Capítulo 6 Sistemas Operacionais Modernos
Capítulo 6 Sistemas Operacionais ModernosCapítulo 6 Sistemas Operacionais Modernos
Capítulo 6 Sistemas Operacionais Modernos
 
Pesquisa e Ordenação - Aula 07 - Métodos de Ordenação (Bin sort - Bucket sort)
Pesquisa e Ordenação - Aula 07 - Métodos de Ordenação (Bin sort - Bucket sort)Pesquisa e Ordenação - Aula 07 - Métodos de Ordenação (Bin sort - Bucket sort)
Pesquisa e Ordenação - Aula 07 - Métodos de Ordenação (Bin sort - Bucket sort)
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Apresentação 20130805 algoritmos
Apresentação 20130805 algoritmos Apresentação 20130805 algoritmos
Apresentação 20130805 algoritmos
 
Algoritmos de busca
Algoritmos de buscaAlgoritmos de busca
Algoritmos de busca
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 

Destaque

Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeRegis Magalhães
 
Recursividade em C
Recursividade em CRecursividade em C
Recursividade em CCaique Silva
 
Lista funcões e recursividade
Lista funcões e recursividadeLista funcões e recursividade
Lista funcões e recursividadeAnielli Lemes
 
12 algoritmos e funcoes recursivas
12   algoritmos e funcoes recursivas12   algoritmos e funcoes recursivas
12 algoritmos e funcoes recursivasRicardo Bolanho
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2Rogerio Oliveira
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeDelacyr Ferreira
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04thomasdacosta
 
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Adriano Teixeira de Souza
 
Rosimar marcano torre de hanoi
Rosimar marcano torre de hanoiRosimar marcano torre de hanoi
Rosimar marcano torre de hanoiID Z
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04thomasdacosta
 
Conferencia consenso Bronquiolitis aguda_resumen recomendaciones
Conferencia consenso Bronquiolitis aguda_resumen recomendacionesConferencia consenso Bronquiolitis aguda_resumen recomendaciones
Conferencia consenso Bronquiolitis aguda_resumen recomendacionesJavier González de Dios
 
Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08thomasdacosta
 
Aula 02 Primeiro Cod Java
Aula 02   Primeiro Cod JavaAula 02   Primeiro Cod Java
Aula 02 Primeiro Cod JavaSergio Silva
 
Programação Estruturada 2 - Aula 06 - Código Fonte
Programação Estruturada 2 - Aula 06 - Código FonteProgramação Estruturada 2 - Aula 06 - Código Fonte
Programação Estruturada 2 - Aula 06 - Código Fontethomasdacosta
 

Destaque (20)

Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 Recursividade
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Recursividade em C
Recursividade em CRecursividade em C
Recursividade em C
 
Lista funcões e recursividade
Lista funcões e recursividadeLista funcões e recursividade
Lista funcões e recursividade
 
12 algoritmos e funcoes recursivas
12   algoritmos e funcoes recursivas12   algoritmos e funcoes recursivas
12 algoritmos e funcoes recursivas
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - Recursividade
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04
 
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Torre De Hanoi
Torre De HanoiTorre De Hanoi
Torre De Hanoi
 
Rosimar marcano torre de hanoi
Rosimar marcano torre de hanoiRosimar marcano torre de hanoi
Rosimar marcano torre de hanoi
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Conferencia consenso Bronquiolitis aguda_resumen recomendaciones
Conferencia consenso Bronquiolitis aguda_resumen recomendacionesConferencia consenso Bronquiolitis aguda_resumen recomendaciones
Conferencia consenso Bronquiolitis aguda_resumen recomendaciones
 
Aula1
Aula1Aula1
Aula1
 
Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08
 
Aula 02 Primeiro Cod Java
Aula 02   Primeiro Cod JavaAula 02   Primeiro Cod Java
Aula 02 Primeiro Cod Java
 
Programação Estruturada 2 - Aula 06 - Código Fonte
Programação Estruturada 2 - Aula 06 - Código FonteProgramação Estruturada 2 - Aula 06 - Código Fonte
Programação Estruturada 2 - Aula 06 - Código Fonte
 

Semelhante a Recursividade

Programando em python recursao
Programando em python   recursaoProgramando em python   recursao
Programando em python recursaosamuelthiago
 
15 algoritmos de busca em tabelas - sequencial e binaria
15   algoritmos de busca em tabelas - sequencial e binaria15   algoritmos de busca em tabelas - sequencial e binaria
15 algoritmos de busca em tabelas - sequencial e binariaRicardo Bolanho
 
Raciocinio logico aula 2
Raciocinio logico aula 2Raciocinio logico aula 2
Raciocinio logico aula 2Nilberte
 
Análise Combinatória
Análise CombinatóriaAnálise Combinatória
Análise CombinatóriaNanda Freitas
 
Metódos de Pesquisa em C
Metódos de Pesquisa em CMetódos de Pesquisa em C
Metódos de Pesquisa em Crodolfoeyalana
 
TABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptx
TABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptxTABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptx
TABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptxOjr Bentes
 
Conceitos fundamentais-de-algoritmos
Conceitos fundamentais-de-algoritmosConceitos fundamentais-de-algoritmos
Conceitos fundamentais-de-algoritmosVando Junqueira
 
Conceitos Fundamentais de algoritmos
Conceitos Fundamentais de algoritmosConceitos Fundamentais de algoritmos
Conceitos Fundamentais de algoritmosPsLucas
 
ANTONIO CLAUDIO LAGE BUFFARA RESPONDE: QUESTÕES PUC-RIO PERMUTAÇÕES COM PILHAS
ANTONIO CLAUDIO LAGE BUFFARA RESPONDE: QUESTÕES PUC-RIO PERMUTAÇÕES COM PILHASANTONIO CLAUDIO LAGE BUFFARA RESPONDE: QUESTÕES PUC-RIO PERMUTAÇÕES COM PILHAS
ANTONIO CLAUDIO LAGE BUFFARA RESPONDE: QUESTÕES PUC-RIO PERMUTAÇÕES COM PILHASAntonio Claudio Lage Buffara
 
Pesquisa e ordenação recursividade
Pesquisa e ordenação   recursividadePesquisa e ordenação   recursividade
Pesquisa e ordenação recursividadeMauricio Wieler
 
Equações Algébricas e Transcendentes - Isolamento de Raízes - @professorenan
Equações Algébricas e Transcendentes - Isolamento de Raízes - @professorenanEquações Algébricas e Transcendentes - Isolamento de Raízes - @professorenan
Equações Algébricas e Transcendentes - Isolamento de Raízes - @professorenanRenan Gustavo
 
Aula03 - Princípios de Contagem.ppsxpppppp
Aula03 - Princípios de Contagem.ppsxppppppAula03 - Princípios de Contagem.ppsxpppppp
Aula03 - Princípios de Contagem.ppsxppppppalessandraoliveira324
 

Semelhante a Recursividade (20)

Aula 3
Aula 3Aula 3
Aula 3
 
Programando em python recursao
Programando em python   recursaoProgramando em python   recursao
Programando em python recursao
 
Polinômios
PolinômiosPolinômios
Polinômios
 
15 algoritmos de busca em tabelas - sequencial e binaria
15   algoritmos de busca em tabelas - sequencial e binaria15   algoritmos de busca em tabelas - sequencial e binaria
15 algoritmos de busca em tabelas - sequencial e binaria
 
Raciocinio logico aula 2
Raciocinio logico aula 2Raciocinio logico aula 2
Raciocinio logico aula 2
 
Análise Combinatória
Análise CombinatóriaAnálise Combinatória
Análise Combinatória
 
Pesquisa sequencial
Pesquisa sequencialPesquisa sequencial
Pesquisa sequencial
 
Metódos de Pesquisa em C
Metódos de Pesquisa em CMetódos de Pesquisa em C
Metódos de Pesquisa em C
 
Analise combinatoria.docx
Analise combinatoria.docxAnalise combinatoria.docx
Analise combinatoria.docx
 
TABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptx
TABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptxTABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptx
TABUADA DE MULTIPLICAÇÃO DINAMIZADA - RESPOSTAS.pptx
 
Conceitos fundamentais-de-algoritmos
Conceitos fundamentais-de-algoritmosConceitos fundamentais-de-algoritmos
Conceitos fundamentais-de-algoritmos
 
Conceitos Fundamentais de algoritmos
Conceitos Fundamentais de algoritmosConceitos Fundamentais de algoritmos
Conceitos Fundamentais de algoritmos
 
Apostila rpira
Apostila rpiraApostila rpira
Apostila rpira
 
Tnotas
TnotasTnotas
Tnotas
 
ANTONIO CLAUDIO LAGE BUFFARA RESPONDE: QUESTÕES PUC-RIO PERMUTAÇÕES COM PILHAS
ANTONIO CLAUDIO LAGE BUFFARA RESPONDE: QUESTÕES PUC-RIO PERMUTAÇÕES COM PILHASANTONIO CLAUDIO LAGE BUFFARA RESPONDE: QUESTÕES PUC-RIO PERMUTAÇÕES COM PILHAS
ANTONIO CLAUDIO LAGE BUFFARA RESPONDE: QUESTÕES PUC-RIO PERMUTAÇÕES COM PILHAS
 
Álgebra de Boole
Álgebra de BooleÁlgebra de Boole
Álgebra de Boole
 
Programacao logica
Programacao logicaProgramacao logica
Programacao logica
 
Pesquisa e ordenação recursividade
Pesquisa e ordenação   recursividadePesquisa e ordenação   recursividade
Pesquisa e ordenação recursividade
 
Equações Algébricas e Transcendentes - Isolamento de Raízes - @professorenan
Equações Algébricas e Transcendentes - Isolamento de Raízes - @professorenanEquações Algébricas e Transcendentes - Isolamento de Raízes - @professorenan
Equações Algébricas e Transcendentes - Isolamento de Raízes - @professorenan
 
Aula03 - Princípios de Contagem.ppsxpppppp
Aula03 - Princípios de Contagem.ppsxppppppAula03 - Princípios de Contagem.ppsxpppppp
Aula03 - Princípios de Contagem.ppsxpppppp
 

Mais de Sérgio Souza Costa

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasSérgio Souza Costa
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computadorSérgio Souza Costa
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosSérgio Souza Costa
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosSérgio Souza Costa
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoSérgio Souza Costa
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemSérgio Souza Costa
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaSérgio Souza Costa
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoSérgio Souza Costa
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theoremsSérgio Souza Costa
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsSérgio Souza Costa
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosSérgio Souza Costa
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Sérgio Souza Costa
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)Sérgio Souza Costa
 

Mais de Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 

Recursividade

  • 2. Recursividade • Muitas estruturas de dados como listas e árvores são recursivas, então é importante compreender conceito de recursividade. *
  • 3. Recursividade ▪ A recursividade é uma forma de resolver problemas por meio da divisão dos problemas em problemas menores de mesma natureza. ▪ Se a natureza dos subproblemas é a mesma do problema, o mesmo método usado para reduzir o problema pode ser usado para reduzir os subproblemas e assim por diante. ▪ Quando devemos parar? Quando alcançarmos um caso trivial que conhecemos a solução. *
  • 4. Recursividade • Exemplos de casos triviais: – – – – – Qual o fatorial de 0 ? Quanto é um dado X multiplicado por 1 ? Quanto é um dado X multiplicado por 0 ? Quanto é um dado X elevado a 1 ? Quantos elementos tem em uma lista vazia?
  • 5. Recursividade Assim, um processo recursivo para a solução de um problema consiste em duas partes: ▪ ▪ ▪ ▪ ▪ O caso trivial, cuja solução é conhecida; Um método geral que reduz o problema a um ou mais problemas menores (subproblemas) de mesma natureza. Muitas funções podem ser definidas recursivamente. Para isso, é preciso identificar as duas partes acima. Exemplo: fatorial de um número e o n-ésimo termo da seqüência de Fibonacci. *
  • 6. Função fatorial ▪ A função fatorial de um inteiro não negativo pode ser definida como: ▪ Esta definição estabelece um processo recursivo para calcular o fatorial de um inteiro n. Caso trivial: n=0. Método geral: n x (n-1)!. ▪ ▪ *
  • 7. Função fatorial ▪ Assim, usando-se este processo recursivo, o cálculo de 4!, por exemplo, é feito como a seguir: 4! = *
  • 8. Função fatorial ▪ Assim, usando-se este processo recursivo, o cálculo de 4!, por exemplo, é feito como a seguir: 4! = 4 * 3! *
  • 9. Função fatorial ▪ Assim, usando-se este processo recursivo, o cálculo de 4!, por exemplo, é feito como a seguir: 4! = 4 * 3! = 4 * (3 * 2!)
  • 10. Função fatorial ▪ Assim, usando-se este processo recursivo, o cálculo de 4!, por exemplo, é feito como a seguir: 4! = 4 * 3! = 4 * (3 * 2!) = 4 * (3 * (2 * 1!))
  • 11. Função fatorial ▪ Assim, usando-se este processo recursivo, o cálculo de 4!, por exemplo, é feito como a seguir: 4! = 4 * 3! = 4 * (3 * 2!) = 4 * (3 * (2 * 1!)) = 4 * (3 * (2 * (1 * 0!)))
  • 12. Função fatorial ▪ Assim, usando-se este processo recursivo, o cálculo de 4!, por exemplo, é feito como a seguir: 4! = 4 * 3! = 4 * (3 * 2!) = 4 * (3 * (2 * 1!)) = 4 * (3 * (2 * (1 * 0!))) = 4 * (3 * (2 * (1 * 1)))
  • 13. Função fatorial ▪ Assim, usando-se este processo recursivo, o cálculo de 4!, por exemplo, é feito como a seguir: 4! = 4 * 3! = 4 * (3 * 2!) = 4 * (3 * (2 * 1!)) = 4 * (3 * (2 * (1 * 0!))) = 4 * (3 * (2 * (1 * 1))) = 4 * (3 * (2 * 1))
  • 14. Função fatorial ▪ Assim, usando-se este processo recursivo, o cálculo de 4!, por exemplo, é feito como a seguir: 4! = 4 * 3! = 4 * (3 * 2!) = 4 * (3 * (2 * 1!)) = 4 * (3 * (2 * (1 * 0!))) = 4 * (3 * (2 * (1 * 1))) = 4 * (3 * (2 * 1)) = 4 * (3 * 2)
  • 15. Função fatorial ▪ Assim, usando-se este processo recursivo, o cálculo de 4!, por exemplo, é feito como a seguir: 4! = 4 * 3! = 4 * (3 * 2!) = 4 * (3 * (2 * 1!)) = 4 * (3 * (2 * (1 * 0!))) = 4 * (3 * (2 * (1 * 1))) = 4 * (3 * (2 * 1)) = 4 * (3 * 2) =4*6
  • 16. Função fatorial ▪ Assim, usando-se este processo recursivo, o cálculo de 4!, por exemplo, é feito como a seguir: 4! = 4 * 3! = 4 * (3 * 2!) = 4 * (3 * (2 * 1!)) = 4 * (3 * (2 * (1 * 0!))) = 4 * (3 * (2 * (1 * 1))) = 4 * (3 * (2 * 1)) = 4 * (3 * 2) =4*6 = 24 Mas como uma função recursiva é de fato implementada no computador? Usando-se o mecanismo conhecido como Pilha de Execução! *
  • 17. Função fatorial ▪ Considere, novamente, o exemplo para 4!: Pilha de Execução fatorial(4) -> return 4*fatorial(3) *
  • 18. Função fatorial ▪ Considere, novamente, o exemplo para 4!: Pilha de Execução fatorial(3) -> return 3*fatorial(2) fatorial(4) -> return 4*fatorial(3) *
  • 19. Função fatorial ▪ Considere, novamente, o exemplo para 4!: Pilha de Execução fatorial(2) -> return 2*fatorial(1) fatorial(3) -> return 3*fatorial(2) fatorial(4) -> return 4*fatorial(3) *
  • 20. Função fatorial ▪ Considere, novamente, o exemplo para 4!: Pilha de Execução fatorial(1) -> return 1*fatorial(0) fatorial(2) -> return 2*fatorial(1) fatorial(3) -> return 3*fatorial(2) fatorial(4) -> return 4*fatorial(3) *
  • 21. Função fatorial ▪ Considere, novamente, o exemplo para 4!: Pilha de Execução fatorial(0) fatorial(1) -> return 1 (caso trivial) -> return 1*fatorial(0) fatorial(2) -> return 2*fatorial(1) fatorial(3) -> return 3*fatorial(2) fatorial(4) -> return 4*fatorial(3) *
  • 22. Função fatorial ▪ Considere, novamente, o exemplo para 4!: Pilha de Execução Desempilha fatorial(0) fatorial(0) fatorial(1) -> return 1 (caso trivial) -> return 1*fatorial(0) fatorial(2) -> return 2*fatorial(1) fatorial(3) -> return 3*fatorial(2) fatorial(4) -> return 4*fatorial(3) *
  • 23. Função fatorial ▪ Considere, novamente, o exemplo para 4!: Desempilha fatorial(1) fatorial(1) -> return 1*1 fatorial(2) -> return 2*fatorial(1) fatorial(3) fatorial(4) -> return 3*fatorial(2) -> return 4*fatorial(3) *
  • 24. Função fatorial ▪ Considere, novamente, o exemplo para 4!: Desempilha fatorial(2) fatorial(2) -> return 2*1*1 fatorial(3) -> return 3*fatorial(2) fatorial(4) -> return 4*fatorial(3) *
  • 25. Função fatorial ▪ Considere, novamente, o exemplo para 4!: Desempilha fatorial(3) fatorial(3) -> return 3*2*1*1 fatorial(4) -> return 4*fatorial(3) *
  • 26. Função fatorial ▪ Considere, novamente, o exemplo para 4!: Desempilha fatorial(4) fatorial(4) -> return 4*3*2*1*1 *
  • 27. Função fatorial ▪ Considere, novamente, o exemplo para 4!: Resultado = 24 *
  • 28. Recursividade "Para fazer um procedimento recursivo é preciso ter fé.” prof. Siang Wun Song *
  • 29. Recursividade "Para fazer um procedimento recursivo é preciso ter fé.” prof. Siang Wun Song "Ao tentar resolver o problema, encontrei obstáculos dentro de obstáculos. Por isso, adotei uma solução recursiva.” Aluno S.Y., 1998 *
  • 30. Recursividade "Para fazer um procedimento recursivo é preciso ter fé.” prof. Siang Wun Song "Ao tentar resolver o problema, encontrei obstáculos dentro de obstáculos. Por isso, adotei uma solução recursiva.” Aluno S.Y., 1998 "To understand recursion, we must first understand recursion.” —anônimo *
  • 31. Funções recursivas • Base do paradigma funcional. – ○ Lisp, Haskell, Miranda, F#, Scheme, Erland – Influenciou diversas: JavaScript, Python,Ruby, Lua • Presente em praticamente todas as linguagens, mesmo as imperativas, como – C, Java, Pascal, ADA ... *
  • 32. Funções recursivas • Muitos algoritmos complexos são resolvidos através de soluções recursivas – Quick-sort (ordenação rápida) – Ordenação por intercalação (merge sort) – Busca binária • Muitas estruturas de dados são recursivas – Listas encadeadas – Árvores binárias, n-árias ... • Tendem a gerar códigos menores *
  • 35. Vamos fazer mais um exercício. Na atividade de aprofundamento tem mais exercícios. Tentem fazer e postem suas dúvidas.
  • 36. Exercício resolvido • Codifiquem uma função que multiplica um dado inteiro “a” por um inteiro “b”, usando somas sucessivas. Exemplo: • 4 * 3 = 3+ 3+ 3 +3 = 12
  • 37. Exercício resolvido int mult (int a, int b) { }
  • 38. Exercício resolvido int mult (int a, int b) { if (a == 0) return }
  • 39. Exercício resolvido int mult (int a, int b) { if (a == 0) return 0; }
  • 40. Exercício resolvido int mult (int a, int b) { if (a == 0) return 0; if (a == 1) return }
  • 41. Exercício resolvido int mult (int a, int b) { if (a == 0) return 0; if (a == 1) return b; }
  • 42. Exercício resolvido int mult (int a, int b) { if (a == 0) return 0; if (a == 1) return b; return b + mult (a-1,b); }
  • 49. Exercícios 1. Faça uma função recursiva que calcula a divisão usando subtrações sucessivas int div (int a, int b); 2. Faça uma função recursiva que calcula o resto de uma divisão usando subtrações sucessivas. int mod (int a, int b); 3.Faça uma função recursiva que calcula a potencia de um numero usando multiplicações sucessivas. int pot (int base, int exp); 4. Faça uma função recursiva que calcula a quantidade de caracteres em uma string. int tamanho (char *str) 5. Fazer uma função recursiva que calcule o valor da série S descrita a seguir para um valor n > 0 a ser fornecido como parâmetro para a mesma: S = 1 + 1/2! + 1/3! + ... 1/n!
  • 50. Tipos Recursivos Um tipo recursivo é definido em termos de si. Exemplos de tipos recursivos: ● listas ● árvores A cardinalidade de tipos recursivos é infinita. Os números naturais é outro exemplo de tipos recursivos
  • 51. Axiomas de Peano O matemático Giuseppe Peano (1858-1932) apresentou alguns axiomas sobre números naturais, que ficaram posteriormente conhecidos como os Axiomas de Peano. Nele precisamos admitir três conceitos primitivos. São eles: zero (denotado por 0), número natural e a noção de sucessor de um número natural. Estes axiomas são listados abaixo: (A1) 0 (zero) é um número natural e não é sucessor de um número natural2. (A2) Todo número natural tem um único sucessor, que também é um número natural. (A3) Se dois números naturais tem o mesmo sucessor, então eles são iguais entre si. (A4) Se um subconjunto S dos números naturais possui o elemento zero e também o sucessor de todos os elementos de S, então S é igual ao conjunto dos números naturais.
  • 52. Tipos Recursivos - Naturais Exemplos: 0 -> Zero
  • 53. Tipos Recursivos - Naturais Exemplos: 0 -> Zero 1 -> Succ (Zero)
  • 54. Tipos Recursivos - Naturais Exemplos: 0 -> Zero 1 -> Succ (Zero) 2- > Succ ( Succ (Zero))
  • 55. Tipos Recursivos - Naturais Exemplos: 0 -> Zero 1 -> Succ (Zero) 2- > Succ ( Succ (Zero)) 3- > Succ ( Succ ( Succ (Zero))) ...
  • 56. Numeros Naturais typedef struct Nat { struct Nat* ant; }* Nat; Definição da estrutura. Observe a recursão. Função que define o Zero Nat Zero () { return NULL; } Nat Succ (Nat a) { Nat n = malloc (sizeof (Nat)); Função que retorna o n->ant = a; sucessor de um dado a. return n; } Função que retorna o Nat ant (Nat a) { antecessor de um dado return a->ant; a. }
  • 57. Numeros Naturais typedef struct Nat { struct Nat* ant; }* Nat; Definição da estrutura. Observe a recursão. Função que define o Zero Nat Zero () { return NULL; } Nat Succ (Nat a) { Nat n = malloc (sizeof (Nat)); Função que retorna o n->ant = a; sucessor de um dado a. return n; Em C, ponteiros é o } recurso que nos Função que retorna o Nat ant (Nat a) { permite definir tipos antecessor de um dado return a->ant; recursivos a. }
  • 58. Numeros Naturais Se b é o número 1, então a + b é definido como sucessor de a. Por outro lado, se b fosse 2, a + b seria definido como sucessor de a + 1. Ou seja, a + c é o sucessor de a + b, onde b é o antecessor de c. Isso pode ser descrito na seguinte função: Nat sum (Nat if (c == return else { return } } a, Nat c) { Zero () ) a; Succ ( sum (a, ant(c)));
  • 59. Numeros Naturais A multiplicação pode ser definida em termos de soma sucessivas. Nat mult (Nat a, Nat b) { if (a == Zero () ) return Zero (); else return sum (b, (mult (b, ant(a)))); }
  • 60. Numeros Naturais A multiplicação pode ser definida em termos de soma sucessivas. Nat mult (Nat a, Nat b) { if (a == Zero () ) return Zero (); else return sum testem o Baixem e (b, (mult (b, ant(a)))); } código.
  • 61. Atividade 1. Codifiquem a divisão inteira. 2. Codifiquem a função que retorna o resto de uma divisão inteira, ou seja, equivalente ao operador %.