SlideShare uma empresa Scribd logo
1 de 145
Baixar para ler offline
Aula 03 – T´ecnicas de
Desenvolvimento de Algoritmos:
Indu¸c˜ao e Recurs˜ao
Norton Trevisan Roman
norton@usp.br
1 de outubro de 2018
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 1 / 34
Indu¸c˜ao e Algoritmos
Vimos que podemos provar que um determinado
problema, definido no conjunto dos n´umeros inteiros
positivos, possui solu¸c˜ao.
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 2 / 34
Indu¸c˜ao e Algoritmos
Vimos que podemos provar que um determinado
problema, definido no conjunto dos n´umeros inteiros
positivos, possui solu¸c˜ao.
O que ´e mesmo um algoritmo?
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 2 / 34
Indu¸c˜ao e Algoritmos
Vimos que podemos provar que um determinado
problema, definido no conjunto dos n´umeros inteiros
positivos, possui solu¸c˜ao.
O que ´e mesmo um algoritmo?
Uma sequˆencia de passos a serem efetuados para que se
obtenha uma solu¸c˜ao para um determinado problema
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 2 / 34
Indu¸c˜ao e Algoritmos
Vimos que podemos provar que um determinado
problema, definido no conjunto dos n´umeros inteiros
positivos, possui solu¸c˜ao.
O que ´e mesmo um algoritmo?
Uma sequˆencia de passos a serem efetuados para que se
obtenha uma solu¸c˜ao para um determinado problema
Ent˜ao, por extens˜ao, podemos provar que um
determinado algoritmo, cuja entrada sejam n´umeros
inteiros positivos, estar´a correto para todo inteiro
positivo
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 2 / 34
Indu¸c˜ao e Algoritmos
De fato, podemos usar a prova por indu¸c˜ao em
qualquer afirma¸c˜ao que contenha uma vari´avel que
possa assumir valores inteiros arbitr´arios e
n˜ao-negativos
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 3 / 34
Indu¸c˜ao e Algoritmos
De fato, podemos usar a prova por indu¸c˜ao em
qualquer afirma¸c˜ao que contenha uma vari´avel que
possa assumir valores inteiros arbitr´arios e
n˜ao-negativos
E o ?
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 3 / 34
Indu¸c˜ao e Algoritmos
De fato, podemos usar a prova por indu¸c˜ao em
qualquer afirma¸c˜ao que contenha uma vari´avel que
possa assumir valores inteiros arbitr´arios e
n˜ao-negativos
E o ?
Precisamos j´a ter o
algoritmo para provar
sua corretude
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 3 / 34
Indu¸c˜ao e Algoritmos
De fato, podemos usar a prova por indu¸c˜ao em
qualquer afirma¸c˜ao que contenha uma vari´avel que
possa assumir valores inteiros arbitr´arios e
n˜ao-negativos
E o ?
Precisamos j´a ter o
algoritmo para provar
sua corretude
Ent˜ao como isso me
ajuda a criar o
algoritmo?
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 3 / 34
Indu¸c˜ao e Algoritmos
Ocorre que a prova matem´atica via indu¸c˜ao finita ´e,
ela pr´opria, um algoritmo recursivo
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 4 / 34
Indu¸c˜ao e Algoritmos
Ocorre que a prova matem´atica via indu¸c˜ao finita ´e,
ela pr´opria, um algoritmo recursivo
Algoritmo recursivo?
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 4 / 34
Indu¸c˜ao e Algoritmos
Ocorre que a prova matem´atica via indu¸c˜ao finita ´e,
ela pr´opria, um algoritmo recursivo
Algoritmo recursivo?
Vejamos o que diz o dicion´ario Fakess para a l´ıngua
portuguesa:
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 4 / 34
Indu¸c˜ao e Algoritmos
Ocorre que a prova matem´atica via indu¸c˜ao finita ´e,
ela pr´opria, um algoritmo recursivo
Algoritmo recursivo?
Vejamos o que diz o dicion´ario Fakess para a l´ıngua
portuguesa:
Defini¸c˜ao
Recurs˜ao: Se n˜ao entendeu, vide Recurs˜ao.
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 4 / 34
Recurs˜ao
Defini¸c˜ao
Um m´etodo ´e chamado de recursivo quando chama a
sim mesmo, direta ou indiretamente.
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 5 / 34
Recurs˜ao
Defini¸c˜ao
Um m´etodo ´e chamado de recursivo quando chama a
sim mesmo, direta ou indiretamente.
E qual a vantagem disso?
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 5 / 34
Recurs˜ao
Defini¸c˜ao
Um m´etodo ´e chamado de recursivo quando chama a
sim mesmo, direta ou indiretamente.
E qual a vantagem disso?
Em geral, a recursividade permite uma descri¸c˜ao
mais clara e concisa do algoritmo
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 5 / 34
Recurs˜ao
Defini¸c˜ao
Um m´etodo ´e chamado de recursivo quando chama a
sim mesmo, direta ou indiretamente.
E qual a vantagem disso?
Em geral, a recursividade permite uma descri¸c˜ao
mais clara e concisa do algoritmo
M´etodos recursivos baseiam-se no princ´ıpio da
Indu¸c˜ao Finita
S˜ao escolhas naturais para algoritmos definidos assim
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 5 / 34
Indu¸c˜ao e Recurs˜ao
E como isso nos ajuda a construir um algoritmo
com indu¸c˜ao finita?
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
Indu¸c˜ao e Recurs˜ao
E como isso nos ajuda a construir um algoritmo
com indu¸c˜ao finita?
Tomemos um exemplo: o c´alculo de um fatorial
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
Indu¸c˜ao e Recurs˜ao
E como isso nos ajuda a construir um algoritmo
com indu¸c˜ao finita?
Tomemos um exemplo: o c´alculo de um fatorial
Sabemos que fatorial(0) = 1
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
Indu¸c˜ao e Recurs˜ao
E como isso nos ajuda a construir um algoritmo
com indu¸c˜ao finita?
Tomemos um exemplo: o c´alculo de um fatorial
Sabemos que fatorial(0) = 1
Vamos assumir que temos magicamente um m´etodo que
calcule o fatorial para n: fatorial(n)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
Indu¸c˜ao e Recurs˜ao
E como isso nos ajuda a construir um algoritmo
com indu¸c˜ao finita?
Tomemos um exemplo: o c´alculo de um fatorial
Sabemos que fatorial(0) = 1
Vamos assumir que temos magicamente um m´etodo que
calcule o fatorial para n: fatorial(n)
Conseguimos ent˜ao calcular o fatorial de n + 1, a partir de
fatorial(n)?
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
Indu¸c˜ao e Recurs˜ao
E como isso nos ajuda a construir um algoritmo
com indu¸c˜ao finita?
Tomemos um exemplo: o c´alculo de um fatorial
Sabemos que fatorial(0) = 1
Vamos assumir que temos magicamente um m´etodo que
calcule o fatorial para n: fatorial(n)
Conseguimos ent˜ao calcular o fatorial de n + 1, a partir de
fatorial(n)?
Sim, basta fazer (n+1) * fatorial(n)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
Indu¸c˜ao e Recurs˜ao
Base
E como isso nos ajuda a construir um algoritmo
com indu¸c˜ao finita?
Tomemos um exemplo: o c´alculo de um fatorial
Sabemos que fatorial(0) = 1
Vamos assumir que temos magicamente um m´etodo que
calcule o fatorial para n: fatorial(n)
Conseguimos ent˜ao calcular o fatorial de n + 1, a partir de
fatorial(n)?
Sim, basta fazer (n+1) * fatorial(n)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
Indu¸c˜ao e Recurs˜ao
Hip´otese de
Indu¸c˜ao
E como isso nos ajuda a construir um algoritmo
com indu¸c˜ao finita?
Tomemos um exemplo: o c´alculo de um fatorial
Sabemos que fatorial(0) = 1
Vamos assumir que temos magicamente um m´etodo que
calcule o fatorial para n: fatorial(n)
Conseguimos ent˜ao calcular o fatorial de n + 1, a partir de
fatorial(n)?
Sim, basta fazer (n+1) * fatorial(n)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
Indu¸c˜ao e Recurs˜ao
Passo
E como isso nos ajuda a construir um algoritmo
com indu¸c˜ao finita?
Tomemos um exemplo: o c´alculo de um fatorial
Sabemos que fatorial(0) = 1
Vamos assumir que temos magicamente um m´etodo que
calcule o fatorial para n: fatorial(n)
Conseguimos ent˜ao calcular o fatorial de n + 1, a partir de
fatorial(n)?
Sim, basta fazer (n+1) * fatorial(n)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
Indu¸c˜ao e Recurs˜ao
Ent˜ao...
long fatorial(long n) {
if (n==0) return(1);
return(n * fatorial(n-1));
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 7 / 34
Indu¸c˜ao e Recurs˜ao
Ent˜ao...
Base
(fatorial(0) = 1)
long fatorial(long n) {
if (n==0) return(1);
return(n * fatorial(n-1));
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 7 / 34
Indu¸c˜ao e Recurs˜ao
Ent˜ao...
Hip´otese de
Indu¸c˜ao
long fatorial(long n) {
if (n==0) return(1);
return(n * fatorial(n-1));
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 7 / 34
Indu¸c˜ao e Recurs˜ao
Ent˜ao...
Passo
long fatorial(long n) {
if (n==0) return(1);
return(n * fatorial(n-1));
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 7 / 34
Indu¸c˜ao e Recurs˜ao
Ent˜ao...
Hip´otese de
Indu¸c˜ao
long fatorial(long n) {
if (n==0) return(1);
return(n * fatorial(n-1));
}
Note que aqui usamos n − 1 em lugar de n na
hip´otese de indu¸c˜ao. O resultado ´e o mesmo.
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 7 / 34
Implementa¸c˜ao de Recurs˜ao
E como o compilador implementa a recurs˜ao?
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 8 / 34
Implementa¸c˜ao de Recurs˜ao
E como o compilador implementa a recurs˜ao?
Por meio da pilha de execu¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 8 / 34
Implementa¸c˜ao de Recurs˜ao
E como o compilador implementa a recurs˜ao?
Por meio da pilha de execu¸c˜ao
A cada chamada de m´etodo, s˜ao empilhados
Seus atributos
Suas vari´aveis locais
Seu endere¸co de retorno (a quem chamou o m´etodo)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 8 / 34
Implementa¸c˜ao de Recurs˜ao
E como o compilador implementa a recurs˜ao?
Por meio da pilha de execu¸c˜ao
A cada chamada de m´etodo, s˜ao empilhados
Seus atributos
Suas vari´aveis locais
Seu endere¸co de retorno (a quem chamou o m´etodo)
Quando o m´etodo termina, esses dados s˜ao
desempilhados
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 8 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
Ao chamarmos fatorial(3),
o m´etodo ´e empilhado
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
N˜ao ´e o caso base
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
Ent˜ao nova chamada
´e feita e empilhada
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
N˜ao ´e o caso base
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
retorna: ?n: 1
Ent˜ao nova chamada
´e feita e empilhada
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
retorna: ?n: 1
N˜ao ´e o caso base
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
retorna: ?n: 1
retorna: ?n: 0
Ent˜ao nova chamada
´e feita e empilhada
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
retorna: ?n: 1
retorna: 1n: 0
´E o caso base!
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
retorna: ?n: 1
Desempilha, retornando 1
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
retorna: 1n: 1
Faz 1 * 1
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: ?n: 2
Desempilha, retornando 1
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
retorna: 2n: 2
Faz 2 * 1
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: ?n: 3
Desempilha, retornando 2
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
retorna: 6n: 3
Faz 3 * 2
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
O que acontece ao fazermos
fatorial(3)?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
} Desempilha, retornando 6
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
Implementa¸c˜ao de Recurs˜ao
Note que, a cada chamada recursiva, criamos c´opias
distintas do m´etodo na pilha
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
} retorna: ?n: 3
retorna: ?n: 2
retorna: ?n: 1
retorna: ?n: 0
Recurs˜ao pode ser bastante custosa!
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 10 / 34
Implementa¸c˜ao de Recurs˜ao
E se esquecermos do
caso base?
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 11 / 34
Implementa¸c˜ao de Recurs˜ao
E se esquecermos do
caso base?
long fatorial(long n) {
return(n *
fatorial(n-1));
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 11 / 34
Implementa¸c˜ao de Recurs˜ao
E se esquecermos do
caso base?
Ser˜ao feitas chamadas
recursivas, at´e o limite
do segmento de
mem´oria alocado `a
pilha
long fatorial(long n) {
return(n *
fatorial(n-1));
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 11 / 34
Implementa¸c˜ao de Recurs˜ao
E se esquecermos do
caso base?
Ser˜ao feitas chamadas
recursivas, at´e o limite
do segmento de
mem´oria alocado `a
pilha
long fatorial(long n) {
return(n *
fatorial(n-1));
}
E teremos ent˜ao um estouro de pilha
Stack overflow
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 11 / 34
Implementa¸c˜ao de Recurs˜ao
E qual a diferen¸ca entre uma
chamada recursiva e uma comum?
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
Implementa¸c˜ao de Recurs˜ao
E qual a diferen¸ca entre uma
chamada recursiva e uma comum?
Nenhuma!
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
Implementa¸c˜ao de Recurs˜ao
E qual a diferen¸ca entre uma
chamada recursiva e uma comum?
Nenhuma!
Considere o c´odigo ao lado
void m1() {
c1;
m2();
c2;
}
void m2() {
c3;
m3();
c4;
}
void m3() {
c5;
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
Implementa¸c˜ao de Recurs˜ao
E qual a diferen¸ca entre uma
chamada recursiva e uma comum?
Nenhuma!
Considere o c´odigo ao lado
Ao chamarmos m1(), este ´e empilhado
m1
void m1() {
c1;
m2();
c2;
}
void m2() {
c3;
m3();
c4;
}
void m3() {
c5;
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
Implementa¸c˜ao de Recurs˜ao
E qual a diferen¸ca entre uma
chamada recursiva e uma comum?
Nenhuma!
Considere o c´odigo ao lado
Ao chamarmos m1(), este ´e empilhado
m1
void m1() {
c1;
m2();
c2;
}
void m2() {
c3;
m3();
c4;
}
void m3() {
c5;
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
Implementa¸c˜ao de Recurs˜ao
E qual a diferen¸ca entre uma
chamada recursiva e uma comum?
Nenhuma!
Considere o c´odigo ao lado
O mesmo ocorre com m2()
m1
m2
void m1() {
c1;
m2();
c2;
}
void m2() {
c3;
m3();
c4;
}
void m3() {
c5;
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
Implementa¸c˜ao de Recurs˜ao
E qual a diferen¸ca entre uma
chamada recursiva e uma comum?
Nenhuma!
Considere o c´odigo ao lado
O mesmo ocorre com m2()
m1
m2
void m1() {
c1;
m2();
c2;
}
void m2() {
c3;
m3();
c4;
}
void m3() {
c5;
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
Implementa¸c˜ao de Recurs˜ao
E qual a diferen¸ca entre uma
chamada recursiva e uma comum?
Nenhuma!
Considere o c´odigo ao lado
E m3()
m1
m2
m3
void m1() {
c1;
m2();
c2;
}
void m2() {
c3;
m3();
c4;
}
void m3() {
c5;
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
Implementa¸c˜ao de Recurs˜ao
E qual a diferen¸ca entre uma
chamada recursiva e uma comum?
Nenhuma!
Considere o c´odigo ao lado
E m3()
m1
m2
m3
void m1() {
c1;
m2();
c2;
}
void m2() {
c3;
m3();
c4;
}
void m3() {
c5;
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
Implementa¸c˜ao de Recurs˜ao
E qual a diferen¸ca entre uma
chamada recursiva e uma comum?
Nenhuma!
Considere o c´odigo ao lado
Ao terminar, m3() ´e desempilhado
m1
m2
void m1() {
c1;
m2();
c2;
}
void m2() {
c3;
m3();
c4;
}
void m3() {
c5;
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
Implementa¸c˜ao de Recurs˜ao
E qual a diferen¸ca entre uma
chamada recursiva e uma comum?
Nenhuma!
Considere o c´odigo ao lado
Ao terminar, m3() ´e desempilhado
m1
m2
void m1() {
c1;
m2();
c2;
}
void m2() {
c3;
m3();
c4;
}
void m3() {
c5;
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
Implementa¸c˜ao de Recurs˜ao
E qual a diferen¸ca entre uma
chamada recursiva e uma comum?
Nenhuma!
Considere o c´odigo ao lado
E m2()
m1
void m1() {
c1;
m2();
c2;
}
void m2() {
c3;
m3();
c4;
}
void m3() {
c5;
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
Implementa¸c˜ao de Recurs˜ao
E qual a diferen¸ca entre uma
chamada recursiva e uma comum?
Nenhuma!
Considere o c´odigo ao lado
E m2()
m1
void m1() {
c1;
m2();
c2;
}
void m2() {
c3;
m3();
c4;
}
void m3() {
c5;
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
Implementa¸c˜ao de Recurs˜ao
E qual a diferen¸ca entre uma
chamada recursiva e uma comum?
Nenhuma!
Considere o c´odigo ao lado
E finalmente m1()
void m1() {
c1;
m2();
c2;
}
void m2() {
c3;
m3();
c4;
}
void m3() {
c5;
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo? void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
Ao chamarmos m1(), este ´e empilhado
m1
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
Ao chamarmos m1(), este ´e empilhado
m1
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
Ao chamarmos m1(), este ´e empilhado
m1
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
Mais uma vez...
m1
m1
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
Mais uma vez...
m1
m1
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
Mais uma vez...
m1
m1
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
E mais uma...
m1
m1
m1
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
At´e que a condi¸c˜ao ser falsa
m1
m1
m1
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
E um retorne, sendo desempilhado
m1
m1
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
E um retorne, sendo desempilhado
m1
m1
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
E outro
m1
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
E outro
m1
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
At´e a chamada original
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Implementa¸c˜ao de Recurs˜ao
E se o m´etodo for recursivo?
Ocorre a mesma coisa...
At´e a chamada original
void m1() {
if (condi¸c~ao) {
c1;
m1();
c2;
}
}
S˜ao todas chamadas distintas. A ´unica diferen¸ca ´e
que na recurs˜ao, elas possuem o mesmo nome
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
Recurs˜ao e Sequˆencias
Sequˆencias
Uma sequˆencia S ´e uma lista de objetos que s˜ao
enumerados segundo alguma ordem
Existe um primeiro objeto, um segundo etc
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 14 / 34
Recurs˜ao e Sequˆencias
Sequˆencias
Uma sequˆencia S ´e uma lista de objetos que s˜ao
enumerados segundo alguma ordem
Existe um primeiro objeto, um segundo etc
Uma sequˆencia ´e definida recursivamente
explicitando-se seu primeiro valor (ou primeiros
valores) e, a partir da´ı, definindo-se outros valores
em termos desses iniciais.
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 14 / 34
Recurs˜ao e Sequˆencias
Sequˆencias
Uma sequˆencia S ´e uma lista de objetos que s˜ao
enumerados segundo alguma ordem
Existe um primeiro objeto, um segundo etc
Uma sequˆencia ´e definida recursivamente
explicitando-se seu primeiro valor (ou primeiros
valores) e, a partir da´ı, definindo-se outros valores
em termos desses iniciais.
Conjuntos, por outro lado, s˜ao cole¸c˜oes nas quais
nenhuma regra de ordena¸c˜ao ´e imposta
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 14 / 34
Recurs˜ao e Sequˆencias
Sequˆencias
Uma sequˆencia S ´e uma lista de objetos que s˜ao
enumerados segundo alguma ordem
Existe um primeiro objeto, um segundo etc
Uma sequˆencia ´e definida recursivamente
explicitando-se seu primeiro valor (ou primeiros
valores) e, a partir da´ı, definindo-se outros valores
em termos desses iniciais.
Conjuntos, por outro lado, s˜ao cole¸c˜oes nas quais
nenhuma regra de ordena¸c˜ao ´e imposta
Alguns conjuntos podem ser definidos recursivamente
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 14 / 34
Recurs˜ao × Itera¸c˜ao
Sequˆencias tˆem tanto algoritmos iterativos quanto
recursivos
Ent˜ao algoritmos recursivos, que tratam de sequˆencias,
tˆem sua vers˜ao iterativa
Ex:
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
long fatorial(long n) {
long res = 1;
for (int i=2; i<=n; i++)
res *= i;
return(res);
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 15 / 34
Recurs˜ao × Itera¸c˜ao
Sequˆencias tˆem tanto algoritmos iterativos quanto
recursivos
Ent˜ao algoritmos recursivos, que tratam de sequˆencias,
tˆem sua vers˜ao iterativa
Ex:
long fatorial(long n) {
if (n==0) return(1);
return(n *
fatorial(n-1));
}
Recursivo
long fatorial(long n) {
long res = 1;
for (int i=2; i<=n; i++)
res *= i;
return(res);
}
Iterativo
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 15 / 34
Recurs˜ao × Itera¸c˜ao
Iterativo
int buscaBin(int[] arr, int el){
int fim = arr.length-1;
int ini = 0;
while (ini <= fim) {
int meio = (fim + ini)/2;
if (arr[meio] < el)
ini = meio + 1;
else
if (arr[meio] > el)
fim = meio - 1;
else
return(meio);
}
return(-1);
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 16 / 34
Recurs˜ao × Itera¸c˜ao
Iterativo
int buscaBin(int[] arr, int el){
int fim = arr.length-1;
int ini = 0;
while (ini <= fim) {
int meio = (fim + ini)/2;
if (arr[meio] < el)
ini = meio + 1;
else
if (arr[meio] > el)
fim = meio - 1;
else
return(meio);
}
return(-1);
}
Recursivo
int buscaBin(int[] arr, int ini,
int fim, int el){
if (ini > fim) return(-1);
int meio = (fim + ini)/2;
if (arr[meio] < el)
return(buscaBin(arr,meio+1,
fim,el));
if (arr[meio] > el)
return(buscaBin(arr,ini,
meio-1,el));
return(meio);
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 16 / 34
Recurs˜ao × Itera¸c˜ao
Solu¸c˜oes recursivas s˜ao geralmente mais concisas
que as iterativas, gerando programas mais simples.
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 17 / 34
Recurs˜ao × Itera¸c˜ao
Solu¸c˜oes recursivas s˜ao geralmente mais concisas
que as iterativas, gerando programas mais simples.
Solu¸c˜oes recursivas adv´em diretamente da prova por
indu¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 17 / 34
Recurs˜ao × Itera¸c˜ao
Solu¸c˜oes recursivas s˜ao geralmente mais concisas
que as iterativas, gerando programas mais simples.
Solu¸c˜oes recursivas adv´em diretamente da prova por
indu¸c˜ao
Solu¸c˜oes iterativas em geral usam uma quantia de
mem´oria limitada, enquanto as recursivas n˜ao
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 17 / 34
Recurs˜ao × Itera¸c˜ao
Solu¸c˜oes recursivas s˜ao geralmente mais concisas
que as iterativas, gerando programas mais simples.
Solu¸c˜oes recursivas adv´em diretamente da prova por
indu¸c˜ao
Solu¸c˜oes iterativas em geral usam uma quantia de
mem´oria limitada, enquanto as recursivas n˜ao
A c´opia dos parˆametros a cada chamada recursiva ´e
um custo adicional para as solu¸c˜oes recursivas
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 17 / 34
Indu¸c˜ao e Algoritmos
Exemplo: C´alculo de Polinˆomios
Dado um arranjo (an, an−1, . . . , a1, a0) de
coeficientes, e um valor x, queremos calcular o
polinˆomio
Pn(x) = anxn
+ an−1xn−1
+ . . . + a1x + a0
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 18 / 34
Indu¸c˜ao e Algoritmos
Exemplo: C´alculo de Polinˆomios
Dado um arranjo (an, an−1, . . . , a1, a0) de
coeficientes, e um valor x, queremos calcular o
polinˆomio
Pn(x) = anxn
+ an−1xn−1
+ . . . + a1x + a0
Vamos projetar um algoritmo para resolver esse
problema a partir da demonstra¸c˜ao indutiva da
seguinte afirma¸c˜ao:
Dados x e (an, an−1, . . . , a1, a0), posso calcular Pn(x)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 18 / 34
Indu¸c˜ao e Algoritmos
Exemplo: C´alculo de Polinˆomios
Demonstra¸c˜ao:
Base: P0(x) = a0
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 19 / 34
Indu¸c˜ao e Algoritmos
Exemplo: C´alculo de Polinˆomios
Demonstra¸c˜ao:
Base: P0(x) = a0
Hip´otese: Dados x e (an, an−1, . . . , a1, a0), conseguimos
calcular Pn−1(x)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 19 / 34
Indu¸c˜ao e Algoritmos
Exemplo: C´alculo de Polinˆomios
Demonstra¸c˜ao:
Base: P0(x) = a0
Hip´otese: Dados x e (an, an−1, . . . , a1, a0), conseguimos
calcular Pn−1(x)
Passo: ´E direto que Pn(x) = anxn
+ Pn−1(x)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 19 / 34
Indu¸c˜ao e Algoritmos
Exemplo: C´alculo de Polinˆomios
Demonstra¸c˜ao:
Base: P0(x) = a0
Hip´otese: Dados x e (an, an−1, . . . , a1, a0), conseguimos
calcular Pn−1(x)
Passo: ´E direto que Pn(x) = anxn
+ Pn−1(x)
Algoritmo derivado:
P(A, x, n)
se n = 0 retorne A[0]
sen~ao
retorne A[n] * x^n + P(A, x, n-1)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 19 / 34
Indu¸c˜ao e Algoritmos
Exemplo: C´alculo de Polinˆomios
Base
Demonstra¸c˜ao:
Base: P0(x) = a0
Hip´otese: Dados x e (an, an−1, . . . , a1, a0), conseguimos
calcular Pn−1(x)
Passo: ´E direto que Pn(x) = anxn
+ Pn−1(x)
Algoritmo derivado:
P(A, x, n)
se n = 0 retorne A[0]
sen~ao
retorne A[n] * x^n + P(A, x, n-1)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 19 / 34
Indu¸c˜ao e Algoritmos
Exemplo: C´alculo de Polinˆomios
Hip´otese de
Indu¸c˜ao
Demonstra¸c˜ao:
Base: P0(x) = a0
Hip´otese: Dados x e (an, an−1, . . . , a1, a0), conseguimos
calcular Pn−1(x)
Passo: ´E direto que Pn(x) = anxn
+ Pn−1(x)
Algoritmo derivado:
P(A, x, n)
se n = 0 retorne A[0]
sen~ao
retorne A[n] * x^n + P(A, x, n-1)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 19 / 34
Indu¸c˜ao e Algoritmos
Exemplo: C´alculo de Polinˆomios
Passo
Demonstra¸c˜ao:
Base: P0(x) = a0
Hip´otese: Dados x e (an, an−1, . . . , a1, a0), conseguimos
calcular Pn−1(x)
Passo: ´E direto que Pn(x) = anxn
+ Pn−1(x)
Algoritmo derivado:
P(A, x, n)
se n = 0 retorne A[0]
sen~ao
retorne A[n] * x^n + P(A, x, n-1)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 19 / 34
Indu¸c˜ao e Algoritmos
Exemplo: C´alculo de Polinˆomios
Algoritmo:
P(A, x, n)
se n = 0 retorne A[0]
sen~ao
retorne A[n] * x^n + P(A, x, n-1)
E em java:
double pol(double[] A, double x, int n) {
if (n==0) return(A[0]);
return(A[n] * Math.pow(x,n) + pol(A,x,n-1));
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 20 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Busca Bin´aria
Vimos o algoritmo “j´a pronto”. Mas ser´a que
conseguimos implement´a-lo a partir da prova?
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 21 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Busca Bin´aria
Vimos o algoritmo “j´a pronto”. Mas ser´a que
conseguimos implement´a-lo a partir da prova?
Considere a afirma¸c˜ao:
“Dado um arranjo r, ordenado de forma crescente,
de tamanho n ≥ 1, consigo dizer se um determinado
valor x est´a ou n˜ao est´a no arranjo”
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 21 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Busca Bin´aria
Base: n = 1.
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Busca Bin´aria
Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Busca Bin´aria
Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r
Hip´otese (H.I.):
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Busca Bin´aria
Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r
Hip´otese (H.I.):
Dado j ≥ 1 e um arranjo r de j elementos, em ordem
crescente, sei dizer se x ∈ r, ∀i = |r|, 1 ≤ i ≤ j
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Busca Bin´aria
Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r
Hip´otese (H.I.):
Dado j ≥ 1 e um arranjo r de j elementos, em ordem
crescente, sei dizer se x ∈ r, ∀i = |r|, 1 ≤ i ≤ j (ind. forte)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Busca Bin´aria
Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r
Hip´otese (H.I.):
Dado j ≥ 1 e um arranjo r de j elementos, em ordem
crescente, sei dizer se x ∈ r, ∀i = |r|, 1 ≤ i ≤ j (ind. forte)
Passo: Seja s um arranjo de j + 1 elementos.
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Busca Bin´aria
Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r
Hip´otese (H.I.):
Dado j ≥ 1 e um arranjo r de j elementos, em ordem
crescente, sei dizer se x ∈ r, ∀i = |r|, 1 ≤ i ≤ j (ind. forte)
Passo: Seja s um arranjo de j + 1 elementos.
Se o elemento do meio de s, sm for x, ent˜ao x ∈ s
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Busca Bin´aria
Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r
Hip´otese (H.I.):
Dado j ≥ 1 e um arranjo r de j elementos, em ordem
crescente, sei dizer se x ∈ r, ∀i = |r|, 1 ≤ i ≤ j (ind. forte)
Passo: Seja s um arranjo de j + 1 elementos.
Se o elemento do meio de s, sm for x, ent˜ao x ∈ s
Sen˜ao, se sm > x, olho no sub-arranjo s = [s1, s2, . . . , sm−1].
Pela H.I., sei dizer se x ∈ s , ent˜ao sei dizer se x ∈ s
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Busca Bin´aria
Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r
Hip´otese (H.I.):
Dado j ≥ 1 e um arranjo r de j elementos, em ordem
crescente, sei dizer se x ∈ r, ∀i = |r|, 1 ≤ i ≤ j (ind. forte)
Passo: Seja s um arranjo de j + 1 elementos.
Se o elemento do meio de s, sm for x, ent˜ao x ∈ s
Sen˜ao, se sm > x, olho no sub-arranjo s = [s1, s2, . . . , sm−1].
Pela H.I., sei dizer se x ∈ s , ent˜ao sei dizer se x ∈ s
Sen˜ao (sm < x), olho no sub-arranjo s = [sm+1, sm+2, . . . ,
sj+1]. Pela H.I., sei dizer se x ∈ s , ent˜ao sei dizer se x ∈ s
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Busca Bin´aria
E disso temos o algoritmo:
busca(r, x)
se |r| = 1
se r1=x retorna "est´a"
sen~ao retorna "n~ao est´a"
sen~ao
m <- ´ındice do meio do arranjo
se rm = x, retorna "est´a"
sen~ao, se rm > x
retorna busca([r1, r2, ..., rm−1], x)
sen~ao
retorna busca([rm+1, rm+2, ..., r|r|], x)
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 23 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Considere a imagem
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 24 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Considere a imagem
O objetivo ´e mover os n discos do primeiro pino a
um outro, de acordo com as seguintes regras:
Apenas um disco pode ser movido por vez
Um disco maior n˜ao pode ser colocado sobre um menor
Pode-se usar o terceiro pino como auxiliar
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 24 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Como fazer?
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 25 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Como fazer?
Quero demonstrar que: Dados 3 pinos, e uma torre
de n discos em um desses pinos, consigo mover essa
torre para um segundo pino, sujeito `as condi¸c˜oes:
Apenas um disco pode ser movido por vez
Um disco maior n˜ao pode ser colocado sobre um menor
Pode-se usar o terceiro pino como auxiliar
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 25 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Base: n = 1
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 26 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Base: n = 1
Mova o disco do pino de origem para o de destino
→
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 26 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Base: n = 1
Mova o disco do pino de origem para o de destino
→
Hip´otese: Consigo mover uma torre de j − 1
discos, (j − 1) ≥ 1 ⇒ j > 1
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 26 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Base: n = 1
Mova o disco do pino de origem para o de destino
→
Hip´otese: Consigo mover uma torre de j − 1
discos, (j − 1) ≥ 1 ⇒ j > 1
Passo: Seja uma torre de Han´oi com j discos:
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 26 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Passo (cont.): Pela H.I., consigo mover os j − 1
discos do topo para um pino auxiliar
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 27 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Passo (cont.): Pela H.I., consigo mover os j − 1
discos do topo para um pino auxiliar
→
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 27 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Passo (cont.): Pela H.I., consigo mover os j − 1
discos do topo para um pino auxiliar
→
Movo ent˜ao o disco da base para o pino de destino
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 27 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Passo (cont.): Pela H.I., consigo mover os j − 1
discos do topo para um pino auxiliar
→
Movo ent˜ao o disco da base para o pino de destino
→
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 27 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Passo (cont.): E, novamente pela H.I., consigo
mover os j − 1 discos do pino auxiliar para o de
destino
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 28 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Passo (cont.): E, novamente pela H.I., consigo
mover os j − 1 discos do pino auxiliar para o de
destino
→
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 28 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Ou seja...
→ →
→ →
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 29 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
Ou seja...
→ →
→ →
Nada intuitivo!
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 29 / 34
Indu¸c˜ao e Algoritmos
Exemplo: Torres de Han´oi
E...
void hanoi(char ori, char dst, char aux, int n) {
if(n == 1) {
System.out.print("Move de " + ori);
System.out.println(" para " + dst);
}
else {
hanoi(ori, aux, dst, n-1);
hanoi(ori, dst, aux, 1);
hanoi(aux, dst, ori, n-1);
}
}
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 30 / 34
Indu¸c˜ao e Algoritmos
Torres de Han´oi: resultado
hanoi(’A’,’C’,’B’,3):
Move de A para C
Move de A para B
Move de C para B
Move de A para C
Move de B para A
Move de B para C
Move de A para C
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 31 / 34
Em Suma
Algoritmos tratam sempre de se demonstrar um
teorema:
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 32 / 34
Em Suma
Algoritmos tratam sempre de se demonstrar um
teorema:
Meu algoritmo resolve um determinado problema
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 32 / 34
Em Suma
Algoritmos tratam sempre de se demonstrar um
teorema:
Meu algoritmo resolve um determinado problema
A demonstra¸c˜ao por indu¸c˜ao ´e uma t´ecnica
bastante interessante, pois:
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 32 / 34
Em Suma
Algoritmos tratam sempre de se demonstrar um
teorema:
Meu algoritmo resolve um determinado problema
A demonstra¸c˜ao por indu¸c˜ao ´e uma t´ecnica
bastante interessante, pois:
Possui a caracter´ıstica de ser construtiva, evidenciando os
passos necess´arios para se obter o resultado do teorema
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 32 / 34
Em Suma
Algoritmos tratam sempre de se demonstrar um
teorema:
Meu algoritmo resolve um determinado problema
A demonstra¸c˜ao por indu¸c˜ao ´e uma t´ecnica
bastante interessante, pois:
Possui a caracter´ıstica de ser construtiva, evidenciando os
passos necess´arios para se obter o resultado do teorema
´Util para formular procedimentos recursivos e indutivos cujas
provas de corretude s˜ao as provas por indu¸c˜ao que lhes
deram origem.
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 32 / 34
Referˆencias
Ziviani, Nivio. Projeto de Algoritmos: com implementa¸c˜oes
em Java e C++. Cengage. 2007.
Manber, Udi. Introduction to Algorithms: A Creative
Approach. Addison-Wesley. 1989.
Gersting, Judith L. Fundamentos Matem´aticos para a Ciˆencia
da Computa¸c˜ao. 3a ed. LTC. 1993.
Manber, Udi. Using Induction to Design Algorithms.
Communications of the ACM, 31(11). 1988.
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 33 / 34
Referˆencias
https://www.coursera.org/lecture/what-is-a-proof/
hanoi-towers-V5KXZ
https:
//algorithms.tutorialhorizon.com/towers-of-hanoi/
http:
//larc.unt.edu/ian/TowersOfHanoi/index64.html
Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 34 / 34

Mais conteúdo relacionado

Mais procurados

(ACH2002) Introdução à Análise de Algoritmos - Aula 04
(ACH2002) Introdução à Análise de Algoritmos - Aula 04(ACH2002) Introdução à Análise de Algoritmos - Aula 04
(ACH2002) Introdução à Análise de Algoritmos - Aula 04Norton Trevisan Roman
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 08
(ACH2002) Introdução à Análise de Algoritmos - Aula 08(ACH2002) Introdução à Análise de Algoritmos - Aula 08
(ACH2002) Introdução à Análise de Algoritmos - Aula 08Norton Trevisan Roman
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 18
(ACH2002) Introdução à Análise de Algoritmos - Aula 18(ACH2002) Introdução à Análise de Algoritmos - Aula 18
(ACH2002) Introdução à Análise de Algoritmos - Aula 18Norton Trevisan Roman
 
Matemática Computacional
Matemática ComputacionalMatemática Computacional
Matemática ComputacionalRicardo Terra
 
Apresentacao N P Completude Loiane
Apresentacao  N P Completude  LoianeApresentacao  N P Completude  Loiane
Apresentacao N P Completude LoianeLoiane Groner
 

Mais procurados (6)

(ACH2002) Introdução à Análise de Algoritmos - Aula 04
(ACH2002) Introdução à Análise de Algoritmos - Aula 04(ACH2002) Introdução à Análise de Algoritmos - Aula 04
(ACH2002) Introdução à Análise de Algoritmos - Aula 04
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 08
(ACH2002) Introdução à Análise de Algoritmos - Aula 08(ACH2002) Introdução à Análise de Algoritmos - Aula 08
(ACH2002) Introdução à Análise de Algoritmos - Aula 08
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 18
(ACH2002) Introdução à Análise de Algoritmos - Aula 18(ACH2002) Introdução à Análise de Algoritmos - Aula 18
(ACH2002) Introdução à Análise de Algoritmos - Aula 18
 
Matemática Computacional
Matemática ComputacionalMatemática Computacional
Matemática Computacional
 
Apresentacao N P Completude Loiane
Apresentacao  N P Completude  LoianeApresentacao  N P Completude  Loiane
Apresentacao N P Completude Loiane
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 

Semelhante a Algoritmos Recursivos Indução

(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09Norton Trevisan Roman
 
Algoritmos visualg
Algoritmos visualgAlgoritmos visualg
Algoritmos visualgDiego Sales
 
Machine learning java ce conference 2012 - fortaleza ce
Machine learning java ce conference 2012 - fortaleza ceMachine learning java ce conference 2012 - fortaleza ce
Machine learning java ce conference 2012 - fortaleza ceLuca Bastos
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 12
(ACH2002) Introdução à Análise de Algoritmos - Aula 12(ACH2002) Introdução à Análise de Algoritmos - Aula 12
(ACH2002) Introdução à Análise de Algoritmos - Aula 12Norton Trevisan Roman
 
Algorítmos e Lógica de Programação1.pptx
Algorítmos e Lógica de Programação1.pptxAlgorítmos e Lógica de Programação1.pptx
Algorítmos e Lógica de Programação1.pptxCristiano Borges
 
Apostila de Introdução a Programação
Apostila de Introdução a ProgramaçãoApostila de Introdução a Programação
Apostila de Introdução a ProgramaçãoThiago Reis da Silva
 
apostila sobre Algoritmos
apostila sobre Algoritmosapostila sobre Algoritmos
apostila sobre AlgoritmosDenise Carmo
 
Linguagemvisualg20 1231617059100335-1
Linguagemvisualg20 1231617059100335-1Linguagemvisualg20 1231617059100335-1
Linguagemvisualg20 1231617059100335-1Daniela Calixto
 
Visualg introdução aos algoritmos
Visualg introdução aos algoritmosVisualg introdução aos algoritmos
Visualg introdução aos algoritmosLuciano Júnior
 
Lógica de programação - ifro - Vilhena - Turma: Técnicos em Informática
Lógica de programação - ifro - Vilhena - Turma: Técnicos em InformáticaLógica de programação - ifro - Vilhena - Turma: Técnicos em Informática
Lógica de programação - ifro - Vilhena - Turma: Técnicos em InformáticaLohraine Ifro Oliveira
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programaçãomafsistemas
 

Semelhante a Algoritmos Recursivos Indução (20)

Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programação
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
Algoritmos visualg
Algoritmos visualgAlgoritmos visualg
Algoritmos visualg
 
Web Data Mining com R
Web Data Mining com RWeb Data Mining com R
Web Data Mining com R
 
Algoritmo aula 01-f
Algoritmo   aula 01-fAlgoritmo   aula 01-f
Algoritmo aula 01-f
 
Machine learning java ce conference 2012 - fortaleza ce
Machine learning java ce conference 2012 - fortaleza ceMachine learning java ce conference 2012 - fortaleza ce
Machine learning java ce conference 2012 - fortaleza ce
 
Algoritmos e Programação
Algoritmos e ProgramaçãoAlgoritmos e Programação
Algoritmos e Programação
 
Forb.cap1
Forb.cap1Forb.cap1
Forb.cap1
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 12
(ACH2002) Introdução à Análise de Algoritmos - Aula 12(ACH2002) Introdução à Análise de Algoritmos - Aula 12
(ACH2002) Introdução à Análise de Algoritmos - Aula 12
 
Algorítmos e Lógica de Programação1.pptx
Algorítmos e Lógica de Programação1.pptxAlgorítmos e Lógica de Programação1.pptx
Algorítmos e Lógica de Programação1.pptx
 
Linguagem visualg2.0
Linguagem visualg2.0Linguagem visualg2.0
Linguagem visualg2.0
 
Apostila de Introdução a Programação
Apostila de Introdução a ProgramaçãoApostila de Introdução a Programação
Apostila de Introdução a Programação
 
Apostila visualg
Apostila visualgApostila visualg
Apostila visualg
 
Algoritimo1
Algoritimo1Algoritimo1
Algoritimo1
 
apostila sobre Algoritmos
apostila sobre Algoritmosapostila sobre Algoritmos
apostila sobre Algoritmos
 
Visual g
Visual gVisual g
Visual g
 
Linguagemvisualg20 1231617059100335-1
Linguagemvisualg20 1231617059100335-1Linguagemvisualg20 1231617059100335-1
Linguagemvisualg20 1231617059100335-1
 
Visualg introdução aos algoritmos
Visualg introdução aos algoritmosVisualg introdução aos algoritmos
Visualg introdução aos algoritmos
 
Lógica de programação - ifro - Vilhena - Turma: Técnicos em Informática
Lógica de programação - ifro - Vilhena - Turma: Técnicos em InformáticaLógica de programação - ifro - Vilhena - Turma: Técnicos em Informática
Lógica de programação - ifro - Vilhena - Turma: Técnicos em Informática
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programação
 

Mais de Norton Trevisan Roman

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04Norton Trevisan Roman
 

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 
(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04(ACH2044) Inteligência Artificial - Aula 04
(ACH2044) Inteligência Artificial - Aula 04
 

Último

DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -Aline Santana
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinhaMary Alvarenga
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxTainTorres4
 
Ficha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFicha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFtimaMoreira35
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
Libras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS MemoriaLibras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS Memorialgrecchi
 
VARIEDADES LINGUÍSTICAS - 1. pptx
VARIEDADES        LINGUÍSTICAS - 1. pptxVARIEDADES        LINGUÍSTICAS - 1. pptx
VARIEDADES LINGUÍSTICAS - 1. pptxMarlene Cunhada
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxBeatrizLittig1
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Ilda Bicacro
 
Revista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfRevista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfMárcio Azevedo
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.silves15
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreCIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreElianeElika
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
análise de redação completa - Dissertação
análise de redação completa - Dissertaçãoanálise de redação completa - Dissertação
análise de redação completa - DissertaçãoMaiteFerreira4
 
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdfPortfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdfjanainadfsilva
 

Último (20)

DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinha
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptxJOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
JOGO FATO OU FAKE - ATIVIDADE LUDICA(1).pptx
 
Ficha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFicha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdf
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
Libras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS MemoriaLibras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS Memoria
 
VARIEDADES LINGUÍSTICAS - 1. pptx
VARIEDADES        LINGUÍSTICAS - 1. pptxVARIEDADES        LINGUÍSTICAS - 1. pptx
VARIEDADES LINGUÍSTICAS - 1. pptx
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docx
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
Revista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdfRevista-Palavra-Viva-Profetas-Menores (1).pdf
Revista-Palavra-Viva-Profetas-Menores (1).pdf
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreCIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
análise de redação completa - Dissertação
análise de redação completa - Dissertaçãoanálise de redação completa - Dissertação
análise de redação completa - Dissertação
 
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdfPortfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
 

Algoritmos Recursivos Indução

  • 1. Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao Norton Trevisan Roman norton@usp.br 1 de outubro de 2018 Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 1 / 34
  • 2. Indu¸c˜ao e Algoritmos Vimos que podemos provar que um determinado problema, definido no conjunto dos n´umeros inteiros positivos, possui solu¸c˜ao. Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 2 / 34
  • 3. Indu¸c˜ao e Algoritmos Vimos que podemos provar que um determinado problema, definido no conjunto dos n´umeros inteiros positivos, possui solu¸c˜ao. O que ´e mesmo um algoritmo? Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 2 / 34
  • 4. Indu¸c˜ao e Algoritmos Vimos que podemos provar que um determinado problema, definido no conjunto dos n´umeros inteiros positivos, possui solu¸c˜ao. O que ´e mesmo um algoritmo? Uma sequˆencia de passos a serem efetuados para que se obtenha uma solu¸c˜ao para um determinado problema Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 2 / 34
  • 5. Indu¸c˜ao e Algoritmos Vimos que podemos provar que um determinado problema, definido no conjunto dos n´umeros inteiros positivos, possui solu¸c˜ao. O que ´e mesmo um algoritmo? Uma sequˆencia de passos a serem efetuados para que se obtenha uma solu¸c˜ao para um determinado problema Ent˜ao, por extens˜ao, podemos provar que um determinado algoritmo, cuja entrada sejam n´umeros inteiros positivos, estar´a correto para todo inteiro positivo Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 2 / 34
  • 6. Indu¸c˜ao e Algoritmos De fato, podemos usar a prova por indu¸c˜ao em qualquer afirma¸c˜ao que contenha uma vari´avel que possa assumir valores inteiros arbitr´arios e n˜ao-negativos Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 3 / 34
  • 7. Indu¸c˜ao e Algoritmos De fato, podemos usar a prova por indu¸c˜ao em qualquer afirma¸c˜ao que contenha uma vari´avel que possa assumir valores inteiros arbitr´arios e n˜ao-negativos E o ? Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 3 / 34
  • 8. Indu¸c˜ao e Algoritmos De fato, podemos usar a prova por indu¸c˜ao em qualquer afirma¸c˜ao que contenha uma vari´avel que possa assumir valores inteiros arbitr´arios e n˜ao-negativos E o ? Precisamos j´a ter o algoritmo para provar sua corretude Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 3 / 34
  • 9. Indu¸c˜ao e Algoritmos De fato, podemos usar a prova por indu¸c˜ao em qualquer afirma¸c˜ao que contenha uma vari´avel que possa assumir valores inteiros arbitr´arios e n˜ao-negativos E o ? Precisamos j´a ter o algoritmo para provar sua corretude Ent˜ao como isso me ajuda a criar o algoritmo? Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 3 / 34
  • 10. Indu¸c˜ao e Algoritmos Ocorre que a prova matem´atica via indu¸c˜ao finita ´e, ela pr´opria, um algoritmo recursivo Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 4 / 34
  • 11. Indu¸c˜ao e Algoritmos Ocorre que a prova matem´atica via indu¸c˜ao finita ´e, ela pr´opria, um algoritmo recursivo Algoritmo recursivo? Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 4 / 34
  • 12. Indu¸c˜ao e Algoritmos Ocorre que a prova matem´atica via indu¸c˜ao finita ´e, ela pr´opria, um algoritmo recursivo Algoritmo recursivo? Vejamos o que diz o dicion´ario Fakess para a l´ıngua portuguesa: Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 4 / 34
  • 13. Indu¸c˜ao e Algoritmos Ocorre que a prova matem´atica via indu¸c˜ao finita ´e, ela pr´opria, um algoritmo recursivo Algoritmo recursivo? Vejamos o que diz o dicion´ario Fakess para a l´ıngua portuguesa: Defini¸c˜ao Recurs˜ao: Se n˜ao entendeu, vide Recurs˜ao. Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 4 / 34
  • 14. Recurs˜ao Defini¸c˜ao Um m´etodo ´e chamado de recursivo quando chama a sim mesmo, direta ou indiretamente. Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 5 / 34
  • 15. Recurs˜ao Defini¸c˜ao Um m´etodo ´e chamado de recursivo quando chama a sim mesmo, direta ou indiretamente. E qual a vantagem disso? Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 5 / 34
  • 16. Recurs˜ao Defini¸c˜ao Um m´etodo ´e chamado de recursivo quando chama a sim mesmo, direta ou indiretamente. E qual a vantagem disso? Em geral, a recursividade permite uma descri¸c˜ao mais clara e concisa do algoritmo Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 5 / 34
  • 17. Recurs˜ao Defini¸c˜ao Um m´etodo ´e chamado de recursivo quando chama a sim mesmo, direta ou indiretamente. E qual a vantagem disso? Em geral, a recursividade permite uma descri¸c˜ao mais clara e concisa do algoritmo M´etodos recursivos baseiam-se no princ´ıpio da Indu¸c˜ao Finita S˜ao escolhas naturais para algoritmos definidos assim Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 5 / 34
  • 18. Indu¸c˜ao e Recurs˜ao E como isso nos ajuda a construir um algoritmo com indu¸c˜ao finita? Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
  • 19. Indu¸c˜ao e Recurs˜ao E como isso nos ajuda a construir um algoritmo com indu¸c˜ao finita? Tomemos um exemplo: o c´alculo de um fatorial Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
  • 20. Indu¸c˜ao e Recurs˜ao E como isso nos ajuda a construir um algoritmo com indu¸c˜ao finita? Tomemos um exemplo: o c´alculo de um fatorial Sabemos que fatorial(0) = 1 Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
  • 21. Indu¸c˜ao e Recurs˜ao E como isso nos ajuda a construir um algoritmo com indu¸c˜ao finita? Tomemos um exemplo: o c´alculo de um fatorial Sabemos que fatorial(0) = 1 Vamos assumir que temos magicamente um m´etodo que calcule o fatorial para n: fatorial(n) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
  • 22. Indu¸c˜ao e Recurs˜ao E como isso nos ajuda a construir um algoritmo com indu¸c˜ao finita? Tomemos um exemplo: o c´alculo de um fatorial Sabemos que fatorial(0) = 1 Vamos assumir que temos magicamente um m´etodo que calcule o fatorial para n: fatorial(n) Conseguimos ent˜ao calcular o fatorial de n + 1, a partir de fatorial(n)? Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
  • 23. Indu¸c˜ao e Recurs˜ao E como isso nos ajuda a construir um algoritmo com indu¸c˜ao finita? Tomemos um exemplo: o c´alculo de um fatorial Sabemos que fatorial(0) = 1 Vamos assumir que temos magicamente um m´etodo que calcule o fatorial para n: fatorial(n) Conseguimos ent˜ao calcular o fatorial de n + 1, a partir de fatorial(n)? Sim, basta fazer (n+1) * fatorial(n) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
  • 24. Indu¸c˜ao e Recurs˜ao Base E como isso nos ajuda a construir um algoritmo com indu¸c˜ao finita? Tomemos um exemplo: o c´alculo de um fatorial Sabemos que fatorial(0) = 1 Vamos assumir que temos magicamente um m´etodo que calcule o fatorial para n: fatorial(n) Conseguimos ent˜ao calcular o fatorial de n + 1, a partir de fatorial(n)? Sim, basta fazer (n+1) * fatorial(n) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
  • 25. Indu¸c˜ao e Recurs˜ao Hip´otese de Indu¸c˜ao E como isso nos ajuda a construir um algoritmo com indu¸c˜ao finita? Tomemos um exemplo: o c´alculo de um fatorial Sabemos que fatorial(0) = 1 Vamos assumir que temos magicamente um m´etodo que calcule o fatorial para n: fatorial(n) Conseguimos ent˜ao calcular o fatorial de n + 1, a partir de fatorial(n)? Sim, basta fazer (n+1) * fatorial(n) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
  • 26. Indu¸c˜ao e Recurs˜ao Passo E como isso nos ajuda a construir um algoritmo com indu¸c˜ao finita? Tomemos um exemplo: o c´alculo de um fatorial Sabemos que fatorial(0) = 1 Vamos assumir que temos magicamente um m´etodo que calcule o fatorial para n: fatorial(n) Conseguimos ent˜ao calcular o fatorial de n + 1, a partir de fatorial(n)? Sim, basta fazer (n+1) * fatorial(n) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 6 / 34
  • 27. Indu¸c˜ao e Recurs˜ao Ent˜ao... long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 7 / 34
  • 28. Indu¸c˜ao e Recurs˜ao Ent˜ao... Base (fatorial(0) = 1) long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 7 / 34
  • 29. Indu¸c˜ao e Recurs˜ao Ent˜ao... Hip´otese de Indu¸c˜ao long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 7 / 34
  • 30. Indu¸c˜ao e Recurs˜ao Ent˜ao... Passo long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 7 / 34
  • 31. Indu¸c˜ao e Recurs˜ao Ent˜ao... Hip´otese de Indu¸c˜ao long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } Note que aqui usamos n − 1 em lugar de n na hip´otese de indu¸c˜ao. O resultado ´e o mesmo. Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 7 / 34
  • 32. Implementa¸c˜ao de Recurs˜ao E como o compilador implementa a recurs˜ao? Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 8 / 34
  • 33. Implementa¸c˜ao de Recurs˜ao E como o compilador implementa a recurs˜ao? Por meio da pilha de execu¸c˜ao Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 8 / 34
  • 34. Implementa¸c˜ao de Recurs˜ao E como o compilador implementa a recurs˜ao? Por meio da pilha de execu¸c˜ao A cada chamada de m´etodo, s˜ao empilhados Seus atributos Suas vari´aveis locais Seu endere¸co de retorno (a quem chamou o m´etodo) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 8 / 34
  • 35. Implementa¸c˜ao de Recurs˜ao E como o compilador implementa a recurs˜ao? Por meio da pilha de execu¸c˜ao A cada chamada de m´etodo, s˜ao empilhados Seus atributos Suas vari´aveis locais Seu endere¸co de retorno (a quem chamou o m´etodo) Quando o m´etodo termina, esses dados s˜ao desempilhados Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 8 / 34
  • 36. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 37. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 Ao chamarmos fatorial(3), o m´etodo ´e empilhado Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 38. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 N˜ao ´e o caso base Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 39. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 Ent˜ao nova chamada ´e feita e empilhada Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 40. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 N˜ao ´e o caso base Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 41. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 retorna: ?n: 1 Ent˜ao nova chamada ´e feita e empilhada Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 42. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 retorna: ?n: 1 N˜ao ´e o caso base Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 43. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 retorna: ?n: 1 retorna: ?n: 0 Ent˜ao nova chamada ´e feita e empilhada Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 44. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 retorna: ?n: 1 retorna: 1n: 0 ´E o caso base! Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 45. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 retorna: ?n: 1 Desempilha, retornando 1 Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 46. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 retorna: 1n: 1 Faz 1 * 1 Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 47. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 Desempilha, retornando 1 Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 48. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: 2n: 2 Faz 2 * 1 Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 49. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 Desempilha, retornando 2 Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 50. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: 6n: 3 Faz 3 * 2 Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 51. Implementa¸c˜ao de Recurs˜ao O que acontece ao fazermos fatorial(3)? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } Desempilha, retornando 6 Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 9 / 34
  • 52. Implementa¸c˜ao de Recurs˜ao Note que, a cada chamada recursiva, criamos c´opias distintas do m´etodo na pilha long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } retorna: ?n: 3 retorna: ?n: 2 retorna: ?n: 1 retorna: ?n: 0 Recurs˜ao pode ser bastante custosa! Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 10 / 34
  • 53. Implementa¸c˜ao de Recurs˜ao E se esquecermos do caso base? long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 11 / 34
  • 54. Implementa¸c˜ao de Recurs˜ao E se esquecermos do caso base? long fatorial(long n) { return(n * fatorial(n-1)); } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 11 / 34
  • 55. Implementa¸c˜ao de Recurs˜ao E se esquecermos do caso base? Ser˜ao feitas chamadas recursivas, at´e o limite do segmento de mem´oria alocado `a pilha long fatorial(long n) { return(n * fatorial(n-1)); } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 11 / 34
  • 56. Implementa¸c˜ao de Recurs˜ao E se esquecermos do caso base? Ser˜ao feitas chamadas recursivas, at´e o limite do segmento de mem´oria alocado `a pilha long fatorial(long n) { return(n * fatorial(n-1)); } E teremos ent˜ao um estouro de pilha Stack overflow Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 11 / 34
  • 57. Implementa¸c˜ao de Recurs˜ao E qual a diferen¸ca entre uma chamada recursiva e uma comum? Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
  • 58. Implementa¸c˜ao de Recurs˜ao E qual a diferen¸ca entre uma chamada recursiva e uma comum? Nenhuma! Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
  • 59. Implementa¸c˜ao de Recurs˜ao E qual a diferen¸ca entre uma chamada recursiva e uma comum? Nenhuma! Considere o c´odigo ao lado void m1() { c1; m2(); c2; } void m2() { c3; m3(); c4; } void m3() { c5; } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
  • 60. Implementa¸c˜ao de Recurs˜ao E qual a diferen¸ca entre uma chamada recursiva e uma comum? Nenhuma! Considere o c´odigo ao lado Ao chamarmos m1(), este ´e empilhado m1 void m1() { c1; m2(); c2; } void m2() { c3; m3(); c4; } void m3() { c5; } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
  • 61. Implementa¸c˜ao de Recurs˜ao E qual a diferen¸ca entre uma chamada recursiva e uma comum? Nenhuma! Considere o c´odigo ao lado Ao chamarmos m1(), este ´e empilhado m1 void m1() { c1; m2(); c2; } void m2() { c3; m3(); c4; } void m3() { c5; } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
  • 62. Implementa¸c˜ao de Recurs˜ao E qual a diferen¸ca entre uma chamada recursiva e uma comum? Nenhuma! Considere o c´odigo ao lado O mesmo ocorre com m2() m1 m2 void m1() { c1; m2(); c2; } void m2() { c3; m3(); c4; } void m3() { c5; } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
  • 63. Implementa¸c˜ao de Recurs˜ao E qual a diferen¸ca entre uma chamada recursiva e uma comum? Nenhuma! Considere o c´odigo ao lado O mesmo ocorre com m2() m1 m2 void m1() { c1; m2(); c2; } void m2() { c3; m3(); c4; } void m3() { c5; } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
  • 64. Implementa¸c˜ao de Recurs˜ao E qual a diferen¸ca entre uma chamada recursiva e uma comum? Nenhuma! Considere o c´odigo ao lado E m3() m1 m2 m3 void m1() { c1; m2(); c2; } void m2() { c3; m3(); c4; } void m3() { c5; } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
  • 65. Implementa¸c˜ao de Recurs˜ao E qual a diferen¸ca entre uma chamada recursiva e uma comum? Nenhuma! Considere o c´odigo ao lado E m3() m1 m2 m3 void m1() { c1; m2(); c2; } void m2() { c3; m3(); c4; } void m3() { c5; } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
  • 66. Implementa¸c˜ao de Recurs˜ao E qual a diferen¸ca entre uma chamada recursiva e uma comum? Nenhuma! Considere o c´odigo ao lado Ao terminar, m3() ´e desempilhado m1 m2 void m1() { c1; m2(); c2; } void m2() { c3; m3(); c4; } void m3() { c5; } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
  • 67. Implementa¸c˜ao de Recurs˜ao E qual a diferen¸ca entre uma chamada recursiva e uma comum? Nenhuma! Considere o c´odigo ao lado Ao terminar, m3() ´e desempilhado m1 m2 void m1() { c1; m2(); c2; } void m2() { c3; m3(); c4; } void m3() { c5; } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
  • 68. Implementa¸c˜ao de Recurs˜ao E qual a diferen¸ca entre uma chamada recursiva e uma comum? Nenhuma! Considere o c´odigo ao lado E m2() m1 void m1() { c1; m2(); c2; } void m2() { c3; m3(); c4; } void m3() { c5; } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
  • 69. Implementa¸c˜ao de Recurs˜ao E qual a diferen¸ca entre uma chamada recursiva e uma comum? Nenhuma! Considere o c´odigo ao lado E m2() m1 void m1() { c1; m2(); c2; } void m2() { c3; m3(); c4; } void m3() { c5; } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
  • 70. Implementa¸c˜ao de Recurs˜ao E qual a diferen¸ca entre uma chamada recursiva e uma comum? Nenhuma! Considere o c´odigo ao lado E finalmente m1() void m1() { c1; m2(); c2; } void m2() { c3; m3(); c4; } void m3() { c5; } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 12 / 34
  • 71. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 72. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 73. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... Ao chamarmos m1(), este ´e empilhado m1 void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 74. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... Ao chamarmos m1(), este ´e empilhado m1 void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 75. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... Ao chamarmos m1(), este ´e empilhado m1 void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 76. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... Mais uma vez... m1 m1 void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 77. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... Mais uma vez... m1 m1 void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 78. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... Mais uma vez... m1 m1 void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 79. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... E mais uma... m1 m1 m1 void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 80. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... At´e que a condi¸c˜ao ser falsa m1 m1 m1 void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 81. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... E um retorne, sendo desempilhado m1 m1 void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 82. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... E um retorne, sendo desempilhado m1 m1 void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 83. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... E outro m1 void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 84. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... E outro m1 void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 85. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... At´e a chamada original void m1() { if (condi¸c~ao) { c1; m1(); c2; } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 86. Implementa¸c˜ao de Recurs˜ao E se o m´etodo for recursivo? Ocorre a mesma coisa... At´e a chamada original void m1() { if (condi¸c~ao) { c1; m1(); c2; } } S˜ao todas chamadas distintas. A ´unica diferen¸ca ´e que na recurs˜ao, elas possuem o mesmo nome Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 13 / 34
  • 87. Recurs˜ao e Sequˆencias Sequˆencias Uma sequˆencia S ´e uma lista de objetos que s˜ao enumerados segundo alguma ordem Existe um primeiro objeto, um segundo etc Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 14 / 34
  • 88. Recurs˜ao e Sequˆencias Sequˆencias Uma sequˆencia S ´e uma lista de objetos que s˜ao enumerados segundo alguma ordem Existe um primeiro objeto, um segundo etc Uma sequˆencia ´e definida recursivamente explicitando-se seu primeiro valor (ou primeiros valores) e, a partir da´ı, definindo-se outros valores em termos desses iniciais. Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 14 / 34
  • 89. Recurs˜ao e Sequˆencias Sequˆencias Uma sequˆencia S ´e uma lista de objetos que s˜ao enumerados segundo alguma ordem Existe um primeiro objeto, um segundo etc Uma sequˆencia ´e definida recursivamente explicitando-se seu primeiro valor (ou primeiros valores) e, a partir da´ı, definindo-se outros valores em termos desses iniciais. Conjuntos, por outro lado, s˜ao cole¸c˜oes nas quais nenhuma regra de ordena¸c˜ao ´e imposta Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 14 / 34
  • 90. Recurs˜ao e Sequˆencias Sequˆencias Uma sequˆencia S ´e uma lista de objetos que s˜ao enumerados segundo alguma ordem Existe um primeiro objeto, um segundo etc Uma sequˆencia ´e definida recursivamente explicitando-se seu primeiro valor (ou primeiros valores) e, a partir da´ı, definindo-se outros valores em termos desses iniciais. Conjuntos, por outro lado, s˜ao cole¸c˜oes nas quais nenhuma regra de ordena¸c˜ao ´e imposta Alguns conjuntos podem ser definidos recursivamente Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 14 / 34
  • 91. Recurs˜ao × Itera¸c˜ao Sequˆencias tˆem tanto algoritmos iterativos quanto recursivos Ent˜ao algoritmos recursivos, que tratam de sequˆencias, tˆem sua vers˜ao iterativa Ex: long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } long fatorial(long n) { long res = 1; for (int i=2; i<=n; i++) res *= i; return(res); } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 15 / 34
  • 92. Recurs˜ao × Itera¸c˜ao Sequˆencias tˆem tanto algoritmos iterativos quanto recursivos Ent˜ao algoritmos recursivos, que tratam de sequˆencias, tˆem sua vers˜ao iterativa Ex: long fatorial(long n) { if (n==0) return(1); return(n * fatorial(n-1)); } Recursivo long fatorial(long n) { long res = 1; for (int i=2; i<=n; i++) res *= i; return(res); } Iterativo Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 15 / 34
  • 93. Recurs˜ao × Itera¸c˜ao Iterativo int buscaBin(int[] arr, int el){ int fim = arr.length-1; int ini = 0; while (ini <= fim) { int meio = (fim + ini)/2; if (arr[meio] < el) ini = meio + 1; else if (arr[meio] > el) fim = meio - 1; else return(meio); } return(-1); } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 16 / 34
  • 94. Recurs˜ao × Itera¸c˜ao Iterativo int buscaBin(int[] arr, int el){ int fim = arr.length-1; int ini = 0; while (ini <= fim) { int meio = (fim + ini)/2; if (arr[meio] < el) ini = meio + 1; else if (arr[meio] > el) fim = meio - 1; else return(meio); } return(-1); } Recursivo int buscaBin(int[] arr, int ini, int fim, int el){ if (ini > fim) return(-1); int meio = (fim + ini)/2; if (arr[meio] < el) return(buscaBin(arr,meio+1, fim,el)); if (arr[meio] > el) return(buscaBin(arr,ini, meio-1,el)); return(meio); } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 16 / 34
  • 95. Recurs˜ao × Itera¸c˜ao Solu¸c˜oes recursivas s˜ao geralmente mais concisas que as iterativas, gerando programas mais simples. Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 17 / 34
  • 96. Recurs˜ao × Itera¸c˜ao Solu¸c˜oes recursivas s˜ao geralmente mais concisas que as iterativas, gerando programas mais simples. Solu¸c˜oes recursivas adv´em diretamente da prova por indu¸c˜ao Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 17 / 34
  • 97. Recurs˜ao × Itera¸c˜ao Solu¸c˜oes recursivas s˜ao geralmente mais concisas que as iterativas, gerando programas mais simples. Solu¸c˜oes recursivas adv´em diretamente da prova por indu¸c˜ao Solu¸c˜oes iterativas em geral usam uma quantia de mem´oria limitada, enquanto as recursivas n˜ao Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 17 / 34
  • 98. Recurs˜ao × Itera¸c˜ao Solu¸c˜oes recursivas s˜ao geralmente mais concisas que as iterativas, gerando programas mais simples. Solu¸c˜oes recursivas adv´em diretamente da prova por indu¸c˜ao Solu¸c˜oes iterativas em geral usam uma quantia de mem´oria limitada, enquanto as recursivas n˜ao A c´opia dos parˆametros a cada chamada recursiva ´e um custo adicional para as solu¸c˜oes recursivas Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 17 / 34
  • 99. Indu¸c˜ao e Algoritmos Exemplo: C´alculo de Polinˆomios Dado um arranjo (an, an−1, . . . , a1, a0) de coeficientes, e um valor x, queremos calcular o polinˆomio Pn(x) = anxn + an−1xn−1 + . . . + a1x + a0 Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 18 / 34
  • 100. Indu¸c˜ao e Algoritmos Exemplo: C´alculo de Polinˆomios Dado um arranjo (an, an−1, . . . , a1, a0) de coeficientes, e um valor x, queremos calcular o polinˆomio Pn(x) = anxn + an−1xn−1 + . . . + a1x + a0 Vamos projetar um algoritmo para resolver esse problema a partir da demonstra¸c˜ao indutiva da seguinte afirma¸c˜ao: Dados x e (an, an−1, . . . , a1, a0), posso calcular Pn(x) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 18 / 34
  • 101. Indu¸c˜ao e Algoritmos Exemplo: C´alculo de Polinˆomios Demonstra¸c˜ao: Base: P0(x) = a0 Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 19 / 34
  • 102. Indu¸c˜ao e Algoritmos Exemplo: C´alculo de Polinˆomios Demonstra¸c˜ao: Base: P0(x) = a0 Hip´otese: Dados x e (an, an−1, . . . , a1, a0), conseguimos calcular Pn−1(x) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 19 / 34
  • 103. Indu¸c˜ao e Algoritmos Exemplo: C´alculo de Polinˆomios Demonstra¸c˜ao: Base: P0(x) = a0 Hip´otese: Dados x e (an, an−1, . . . , a1, a0), conseguimos calcular Pn−1(x) Passo: ´E direto que Pn(x) = anxn + Pn−1(x) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 19 / 34
  • 104. Indu¸c˜ao e Algoritmos Exemplo: C´alculo de Polinˆomios Demonstra¸c˜ao: Base: P0(x) = a0 Hip´otese: Dados x e (an, an−1, . . . , a1, a0), conseguimos calcular Pn−1(x) Passo: ´E direto que Pn(x) = anxn + Pn−1(x) Algoritmo derivado: P(A, x, n) se n = 0 retorne A[0] sen~ao retorne A[n] * x^n + P(A, x, n-1) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 19 / 34
  • 105. Indu¸c˜ao e Algoritmos Exemplo: C´alculo de Polinˆomios Base Demonstra¸c˜ao: Base: P0(x) = a0 Hip´otese: Dados x e (an, an−1, . . . , a1, a0), conseguimos calcular Pn−1(x) Passo: ´E direto que Pn(x) = anxn + Pn−1(x) Algoritmo derivado: P(A, x, n) se n = 0 retorne A[0] sen~ao retorne A[n] * x^n + P(A, x, n-1) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 19 / 34
  • 106. Indu¸c˜ao e Algoritmos Exemplo: C´alculo de Polinˆomios Hip´otese de Indu¸c˜ao Demonstra¸c˜ao: Base: P0(x) = a0 Hip´otese: Dados x e (an, an−1, . . . , a1, a0), conseguimos calcular Pn−1(x) Passo: ´E direto que Pn(x) = anxn + Pn−1(x) Algoritmo derivado: P(A, x, n) se n = 0 retorne A[0] sen~ao retorne A[n] * x^n + P(A, x, n-1) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 19 / 34
  • 107. Indu¸c˜ao e Algoritmos Exemplo: C´alculo de Polinˆomios Passo Demonstra¸c˜ao: Base: P0(x) = a0 Hip´otese: Dados x e (an, an−1, . . . , a1, a0), conseguimos calcular Pn−1(x) Passo: ´E direto que Pn(x) = anxn + Pn−1(x) Algoritmo derivado: P(A, x, n) se n = 0 retorne A[0] sen~ao retorne A[n] * x^n + P(A, x, n-1) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 19 / 34
  • 108. Indu¸c˜ao e Algoritmos Exemplo: C´alculo de Polinˆomios Algoritmo: P(A, x, n) se n = 0 retorne A[0] sen~ao retorne A[n] * x^n + P(A, x, n-1) E em java: double pol(double[] A, double x, int n) { if (n==0) return(A[0]); return(A[n] * Math.pow(x,n) + pol(A,x,n-1)); } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 20 / 34
  • 109. Indu¸c˜ao e Algoritmos Exemplo: Busca Bin´aria Vimos o algoritmo “j´a pronto”. Mas ser´a que conseguimos implement´a-lo a partir da prova? Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 21 / 34
  • 110. Indu¸c˜ao e Algoritmos Exemplo: Busca Bin´aria Vimos o algoritmo “j´a pronto”. Mas ser´a que conseguimos implement´a-lo a partir da prova? Considere a afirma¸c˜ao: “Dado um arranjo r, ordenado de forma crescente, de tamanho n ≥ 1, consigo dizer se um determinado valor x est´a ou n˜ao est´a no arranjo” Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 21 / 34
  • 111. Indu¸c˜ao e Algoritmos Exemplo: Busca Bin´aria Base: n = 1. Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
  • 112. Indu¸c˜ao e Algoritmos Exemplo: Busca Bin´aria Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
  • 113. Indu¸c˜ao e Algoritmos Exemplo: Busca Bin´aria Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r Hip´otese (H.I.): Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
  • 114. Indu¸c˜ao e Algoritmos Exemplo: Busca Bin´aria Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r Hip´otese (H.I.): Dado j ≥ 1 e um arranjo r de j elementos, em ordem crescente, sei dizer se x ∈ r, ∀i = |r|, 1 ≤ i ≤ j Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
  • 115. Indu¸c˜ao e Algoritmos Exemplo: Busca Bin´aria Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r Hip´otese (H.I.): Dado j ≥ 1 e um arranjo r de j elementos, em ordem crescente, sei dizer se x ∈ r, ∀i = |r|, 1 ≤ i ≤ j (ind. forte) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
  • 116. Indu¸c˜ao e Algoritmos Exemplo: Busca Bin´aria Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r Hip´otese (H.I.): Dado j ≥ 1 e um arranjo r de j elementos, em ordem crescente, sei dizer se x ∈ r, ∀i = |r|, 1 ≤ i ≤ j (ind. forte) Passo: Seja s um arranjo de j + 1 elementos. Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
  • 117. Indu¸c˜ao e Algoritmos Exemplo: Busca Bin´aria Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r Hip´otese (H.I.): Dado j ≥ 1 e um arranjo r de j elementos, em ordem crescente, sei dizer se x ∈ r, ∀i = |r|, 1 ≤ i ≤ j (ind. forte) Passo: Seja s um arranjo de j + 1 elementos. Se o elemento do meio de s, sm for x, ent˜ao x ∈ s Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
  • 118. Indu¸c˜ao e Algoritmos Exemplo: Busca Bin´aria Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r Hip´otese (H.I.): Dado j ≥ 1 e um arranjo r de j elementos, em ordem crescente, sei dizer se x ∈ r, ∀i = |r|, 1 ≤ i ≤ j (ind. forte) Passo: Seja s um arranjo de j + 1 elementos. Se o elemento do meio de s, sm for x, ent˜ao x ∈ s Sen˜ao, se sm > x, olho no sub-arranjo s = [s1, s2, . . . , sm−1]. Pela H.I., sei dizer se x ∈ s , ent˜ao sei dizer se x ∈ s Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
  • 119. Indu¸c˜ao e Algoritmos Exemplo: Busca Bin´aria Base: n = 1. Se r1 = x, ent˜ao x ∈ r, sen˜ao x /∈ r Hip´otese (H.I.): Dado j ≥ 1 e um arranjo r de j elementos, em ordem crescente, sei dizer se x ∈ r, ∀i = |r|, 1 ≤ i ≤ j (ind. forte) Passo: Seja s um arranjo de j + 1 elementos. Se o elemento do meio de s, sm for x, ent˜ao x ∈ s Sen˜ao, se sm > x, olho no sub-arranjo s = [s1, s2, . . . , sm−1]. Pela H.I., sei dizer se x ∈ s , ent˜ao sei dizer se x ∈ s Sen˜ao (sm < x), olho no sub-arranjo s = [sm+1, sm+2, . . . , sj+1]. Pela H.I., sei dizer se x ∈ s , ent˜ao sei dizer se x ∈ s Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 22 / 34
  • 120. Indu¸c˜ao e Algoritmos Exemplo: Busca Bin´aria E disso temos o algoritmo: busca(r, x) se |r| = 1 se r1=x retorna "est´a" sen~ao retorna "n~ao est´a" sen~ao m <- ´ındice do meio do arranjo se rm = x, retorna "est´a" sen~ao, se rm > x retorna busca([r1, r2, ..., rm−1], x) sen~ao retorna busca([rm+1, rm+2, ..., r|r|], x) Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 23 / 34
  • 121. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Considere a imagem Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 24 / 34
  • 122. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Considere a imagem O objetivo ´e mover os n discos do primeiro pino a um outro, de acordo com as seguintes regras: Apenas um disco pode ser movido por vez Um disco maior n˜ao pode ser colocado sobre um menor Pode-se usar o terceiro pino como auxiliar Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 24 / 34
  • 123. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Como fazer? Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 25 / 34
  • 124. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Como fazer? Quero demonstrar que: Dados 3 pinos, e uma torre de n discos em um desses pinos, consigo mover essa torre para um segundo pino, sujeito `as condi¸c˜oes: Apenas um disco pode ser movido por vez Um disco maior n˜ao pode ser colocado sobre um menor Pode-se usar o terceiro pino como auxiliar Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 25 / 34
  • 125. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Base: n = 1 Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 26 / 34
  • 126. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Base: n = 1 Mova o disco do pino de origem para o de destino → Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 26 / 34
  • 127. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Base: n = 1 Mova o disco do pino de origem para o de destino → Hip´otese: Consigo mover uma torre de j − 1 discos, (j − 1) ≥ 1 ⇒ j > 1 Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 26 / 34
  • 128. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Base: n = 1 Mova o disco do pino de origem para o de destino → Hip´otese: Consigo mover uma torre de j − 1 discos, (j − 1) ≥ 1 ⇒ j > 1 Passo: Seja uma torre de Han´oi com j discos: Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 26 / 34
  • 129. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Passo (cont.): Pela H.I., consigo mover os j − 1 discos do topo para um pino auxiliar Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 27 / 34
  • 130. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Passo (cont.): Pela H.I., consigo mover os j − 1 discos do topo para um pino auxiliar → Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 27 / 34
  • 131. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Passo (cont.): Pela H.I., consigo mover os j − 1 discos do topo para um pino auxiliar → Movo ent˜ao o disco da base para o pino de destino Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 27 / 34
  • 132. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Passo (cont.): Pela H.I., consigo mover os j − 1 discos do topo para um pino auxiliar → Movo ent˜ao o disco da base para o pino de destino → Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 27 / 34
  • 133. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Passo (cont.): E, novamente pela H.I., consigo mover os j − 1 discos do pino auxiliar para o de destino Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 28 / 34
  • 134. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Passo (cont.): E, novamente pela H.I., consigo mover os j − 1 discos do pino auxiliar para o de destino → Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 28 / 34
  • 135. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Ou seja... → → → → Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 29 / 34
  • 136. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi Ou seja... → → → → Nada intuitivo! Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 29 / 34
  • 137. Indu¸c˜ao e Algoritmos Exemplo: Torres de Han´oi E... void hanoi(char ori, char dst, char aux, int n) { if(n == 1) { System.out.print("Move de " + ori); System.out.println(" para " + dst); } else { hanoi(ori, aux, dst, n-1); hanoi(ori, dst, aux, 1); hanoi(aux, dst, ori, n-1); } } Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 30 / 34
  • 138. Indu¸c˜ao e Algoritmos Torres de Han´oi: resultado hanoi(’A’,’C’,’B’,3): Move de A para C Move de A para B Move de C para B Move de A para C Move de B para A Move de B para C Move de A para C Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 31 / 34
  • 139. Em Suma Algoritmos tratam sempre de se demonstrar um teorema: Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 32 / 34
  • 140. Em Suma Algoritmos tratam sempre de se demonstrar um teorema: Meu algoritmo resolve um determinado problema Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 32 / 34
  • 141. Em Suma Algoritmos tratam sempre de se demonstrar um teorema: Meu algoritmo resolve um determinado problema A demonstra¸c˜ao por indu¸c˜ao ´e uma t´ecnica bastante interessante, pois: Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 32 / 34
  • 142. Em Suma Algoritmos tratam sempre de se demonstrar um teorema: Meu algoritmo resolve um determinado problema A demonstra¸c˜ao por indu¸c˜ao ´e uma t´ecnica bastante interessante, pois: Possui a caracter´ıstica de ser construtiva, evidenciando os passos necess´arios para se obter o resultado do teorema Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 32 / 34
  • 143. Em Suma Algoritmos tratam sempre de se demonstrar um teorema: Meu algoritmo resolve um determinado problema A demonstra¸c˜ao por indu¸c˜ao ´e uma t´ecnica bastante interessante, pois: Possui a caracter´ıstica de ser construtiva, evidenciando os passos necess´arios para se obter o resultado do teorema ´Util para formular procedimentos recursivos e indutivos cujas provas de corretude s˜ao as provas por indu¸c˜ao que lhes deram origem. Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 32 / 34
  • 144. Referˆencias Ziviani, Nivio. Projeto de Algoritmos: com implementa¸c˜oes em Java e C++. Cengage. 2007. Manber, Udi. Introduction to Algorithms: A Creative Approach. Addison-Wesley. 1989. Gersting, Judith L. Fundamentos Matem´aticos para a Ciˆencia da Computa¸c˜ao. 3a ed. LTC. 1993. Manber, Udi. Using Induction to Design Algorithms. Communications of the ACM, 31(11). 1988. Norton Trevisan Romannorton@usp.br Aula 03 – T´ecnicas de Desenvolvimento de Algoritmos: Indu¸c˜ao e Recurs˜ao1 de outubro de 2018 33 / 34