Computação 2 Aula 2 Teórica professor: Leonardo Carvalho O que essas figuras têm em comum? Recursão Função recursiva Função que chama a si própria. def funcao_exemplo(...): ... funcao_exemplo(...) ... Fatorial (sem recursão) def fatorial(n): res = 1 for i in range(1, n+1): res = res*i return res Fatorial recursivo def fatorial(n): if n > 0: return n*fatorial(n-1) else: return 1 Fatorial recursivo Máximo Divisor Comum (mdc) def mdc(a, b): if b == 0: return a else: return mdc(b, a%b) Máximo Divisor Comum (mdc) Recursão com Turtle Desenhando uma curva recursivamente def linha(s): if s < 1: return turtle.forward(s) turtle.left(10) linha(0.8*s) Quadrados def quadrado(x): for i in range(4): turtle.forward(x) turtle.left(90) Movendo a tartaruga sem desenhar def move(x, y): turtle.up() # levanta a caneta turtle.forward(x) turtle.left(90) turtle.forward(y) turtle.right(90) turtle.down() # abaixa a caneta Quadrados recursivos def tela(s): if s < 1: return quadrado(s) move(0.2*s, 0.2*s) tela(0.4*s) Aprimorando def tela(s): if s < 1: return quadrado(s) move(.05*s, .55*s) quadrado(.4*s) move(.7*s, 0) turtle.circle(.2*s) move(0, -.5*s) turtle.circle(.2*s) move(-.7*s, 0) tela(0.4*s) Árvore def arvore(s): if s < 2: return turtle.forward(s) turtle.left(30) arvore(.6*s) turtle.right(60) arvore(.6*s) turtle.left(30) turtle.backward(s) Desafio Observando execução dos programas Depuração ou debug Monitorar a execução de um programa, normalmente em busca de erros. Controle da execução de um programa ● ● ● ● executar passo a passo pausar a execução pontos de parada verificar dados Depuração com Python tutor Depuração com Python tutor Depuração com Python tutor Depuração com Python tutor Depuração com Python tutor Depuração com Python tutor Depuração com Python tutor Depuração com Python tutor Depuração com Idle Depuração com Idle Depuração com Idle Depuração com Idle Depuração com Idle Depuração com Idle Depuração com Idle Podemos usar outro editor? Download https://www.continuum.io/downloads Interface do Spyder Depuração de funções recursivas Fatorial def fatorial(n): if n > 0: return n*fatorial(n-1) else: return 1 mdc def mdc(a, b): if b == 0: return a else: return mdc(b, a%b) É possível reescrever uma função recursiva sem recursão? mdc (sem recursão) def mdc(a, b): while b != 0: a, b = b, a%b return a Árvore (sem recursão) def arvore(s): ?