Subindo uma escada. Ação: Subir 1 degrau da escada
|
|
- Davi Jardim Domingues
- 6 Há anos
- Visualizações:
Transcrição
1 Recursão
2 Subindo uma escada Ação: Subir 1 degrau da escada 2
3 Subindo uma escada Ação: Subir 1 degrau da escada 3
4 Subindo uma escada Ação: E agora??? 4
5 Subindo uma escada Ação: E agora??? Tem uma escada... 5
6 Subindo uma escada Ação: Subir 1 degrau da escada 6
7 Subindo uma escada Ação: E agora??? 7
8 Subindo uma escada Ação: E agora??? Tem uma escada... Subir 1 degrau da escada 8
9 Subindo uma escada Ação: E agora??? Tem uma escada... Que sequência de ações o bot está realizando? Subir 1 degrau da escada 9
10 Subindo uma escada Que sequência de ações o bot está realizando? Subir 1 degrau Subir escada restante (de n-1 degraus) 10
11 Subindo uma escada Subir uma escada de n degraus é: Subir 1 degrau Subir uma escada de n-1 degraus 11
12 Subindo uma escada Subir uma escada de n degraus é: Subir 1 degrau Subir uma escada de n-1 degraus 12
13 Subindo uma escada Subir uma escada de n degraus é: Subir 1 degrau Subir uma escada de n-1 degraus 13
14 Subindo uma escada Subir uma escada de n degraus é: Subir 1 degrau Subir uma escada de n-1 degraus 14
15 Subindo uma escada Subir uma escada de n degraus é: Subir 1 degrau Subir uma escada de n-1 degraus 15
16 Subindo uma escada Subir uma escada de n degraus é: Subir 1 degrau Subir uma escada de n-1 degraus 16
17 Subindo uma escada Subir uma escada de n degraus é: Subir 1 degrau Subir uma escada de n-1 degraus 17
18 Subindo uma escada Subir uma escada de n degraus é: Subir 1 degrau Subir uma escada de n-1 degraus 18
19 Subindo uma escada Subir uma escada de n degraus é: Subir 1 degrau Subir uma escada de n-1 degraus 19
20 Subindo uma escada Subir uma escada de n degraus é: Subir 1 degrau Subir uma escada de n-1 degraus O que aconteceu????? Por que ele caiu???? 20
21 Subindo uma escada Subir uma escada de n degraus é: Subir 1 degrau Subir uma escada de n-1 degraus a ação é definida em termos de si mesma Subir uma escada aparece como parte da definição de subir uma escada!! Forma um ciclo Quando interromper o ciclo para que o bot não caia? 21
22 Subindo uma escada Quando interromper o ciclo para que o bot não caia? Escada com degraus deve subir Escada sem degraus deve parar 22
23 Subindo uma escada Subir uma escada de n degraus é: Se não há degraus na escada ( n == 0) chegou no topo da escada/não há escada Senão Subir 1 degrau Subir uma escada de n-1 degraus 23
24 Subindo uma escada Subir uma escada de n degraus é: Se não há degraus na escada ( n == 0) chegou no topo da escada/não há escada Senão Subir 1 degrau Subir uma escada de n-1 degraus 24
25 Subindo uma escada Subir uma escada de n degraus é: Se não há degraus na escada ( n == 0) chegou no topo da escada/não há escada Senão Subir 1 degrau Subir uma escada de n-1 degraus 25
26 Subindo uma escada Subir uma escada de n degraus é: Se não há degraus na escada ( n == 0) chegou no topo da escada/não há escada Senão Subir 1 degrau Subir uma escada de n-1 degraus 26
27 Subindo uma escada Subir uma escada de n degraus é: Se não há degraus na escada ( n == 0) chegou no topo da escada/não há escada Senão Subir 1 degrau Subir uma escada de n-1 degraus 27
28 Subindo uma escada Subir uma escada de n degraus é: Se não há degraus na escada ( n == 0) chegou no topo da escada/não há escada Senão Subir 1 degrau Subir uma escada de n-1 degraus 28
29 Subindo uma escada Subir uma escada de n degraus é: Se não há degraus na escada ( n == 0) chegou no topo da escada/não há escada Senão Subir 1 degrau Subir uma escada de n-1 degraus 29
30 Subindo uma escada 30
31 Recursividade Um objeto é dito recursivo se pode ser definido em termos de si próprio: "o quê está sendo definido aparece como parte da definição" Para fazer iogurte, você precisa de leite e de um pouco de iogurte. Para subir uma escada você precisa subir um degrau e depois o resto da escada Em toda definição recursiva, existe um caso trivial ( caso base), cuja solução é conhecida e interrompe a recorrência. Sequências, funções e conjuntos podem ser definidos recursivamente. 31
32 Recursividade em conjuntos Exemplo: Conjunto dos números naturais (pelos axiomas de Peano) 0 não é sucessor de nenhum número Todo número natural tem um único sucessor que também é um número natural Obs: Todo conjunto definido recursivamente tem cardinalidade infinita (suc(0)) 2 -- (suc(suc(0)) 3 -- (suc(suc(suc(0))) 32
33 Recursividade na Natureza * 33
34 Definições Recursivas Composta de duas partes: (1) uma base, onde alguns casos simples do item que está sendo definido são dados explicitamente (ponto de partida) (2) um passo indutivo ou recursivo, onde outros casos do item que está sendo definido são dados em termos de casos anteriores. (novos casos construídos a partir dos casos simples, que são base para construir outros casos e assim por diante) 34
35 Mãos na massa! Encontre a definição recursiva de: 1. x*y Casos Triviais? Passos Recursivos? 2. x y, com y N Casos Triviais? Passos Recursivos? 3. Quantidade de caracteres em uma string Casos Triviais? Passos Recursivos? 4. x! Casos Triviais? Passos Recursivos? 5. DESAFIO: x:y, com x, y N Casos Triviais? Passos Recursivos? 6. DESAFIO: x%y com y N Casos Triviais? Passos Recursivos? 35
36 Solução Encontre a definição recursiva de: 1. x * y 3 * 4 = 3 + (3*3) 3 * 3 = 3 + (3*2) 3 * 2 = 3 + (3*1) 3 * 1 = 3 + (3*0) 3 * 0 = 0 Casos Triviais? Passo Recursivo? 36
37 Solução 1. x * y 3 * 4 = 3 + (3*3) 3 * 3 = 3 + (3*2) 3 * 2 = 3 + (3*1) 3 * 1 = 3 + (3*0) 3 * 0 = 0 Caso Trivial? x*0 = 0 Passo Recursivo? x* y = x + x*(y-1) x* y 0, y x 0 x*( y 1), y 0 37
38 Solução 2. x y 3 4 = 3 * = 3 * = 3 * = 3 * = 1 Caso Trivial? x 0 = 1 Passo Recursivo? x y = x * x (y-1) x y 1, y x* x 0 y 1, y 0 38
39 Solução 3. Quantidade de caracteres em uma string Mia = M + ia ia = i + a a = a + '' Caso Trivial? string vazia 0 Passos Recursivos? 1 (do 1º caractere) + quantidade de caracteres na string subsequente comprimento ( str) 0, se str '' 1 comprimento (str[1:]), sestr '' 39
40 Fatorial de um número 4. Fatorial de um número n! = n * (n-1)! (n-1)! = (n-1) * (n-2)! (n-2)! = (n-2) * (n-3)!... (n-(n-1))! = (n-(n-1)) * (n-n)! (n-n)! =1 1, se n 0 n! n (n 1)!, se n 0 Esta relação de recorrência é infinita? 40
41 Fatorial de um número 1, se n n! n ( n 0 1)!, se n 0 Caso base ( ou trivial): solução conhecida. não envolve a recursão Interrompe a recorrência 41
42 Fatorial de um número 1, se n 0 n! n (n 1)!, se n 0 Caso BASE Passo Recursivo 42
43 Fatorial de 3 3! = 3 * 2! = 2 * 1, se n 0 n! n (n 1)!, se n 0 1! = 1 * 0! = 1 43
44 Fatorial de 3 6 = 3! = 3 * 2 2! = 2 * 1 1, se n 0 n! n (n 1)!, se n 0 1! = 1 * 1 0! = 1 44
45 Solução 5. Quociente da divisão inteira x : y Repartir x em grupos de y unidades. Quantas vezes o y cabe inteiro dentro do x? Caso Trivial? x < y = 0 Passo Recursivo? x y 1 + (x-y):y 7:2 = 1+ ( 5:2) 5:2 = 1 + (3:2) 3:2 = 1+ (1:2) 1:2 = 0 x : y 0, x y 1 (x - y): y, x y 45
46 Solução 6. Resto da divisão inteira x % y O que sobra de x ao reparti-lo em grupos de y unidades. Caso Trivial? x < y = x Passo Recursivo? x y, 0 + (x-y) % y x % y x, x (x - y) y % y, x y 46
47 Estruturas Recursivas: Árvore Genealógica Eu e pais Eu, pais e avós Eu, pais, avós e bisavós Eu, pais, avós bisavós e tataravós Eu e meus ancestrais pais dos pais pais dos avós pais dos bisavós 47
48 Estruturas Recursivas: Árvore Genealógica-Principal Se o nível de ancestral desejado foi atingido parar Senão Desenhar galho do nível Desenhar árvore genealógica da mãe do nível (c/-30 0 ) Desenhar árvore genealógica do pai do nível (c/+30 0 ) 48
49 Figuras Recursivas (fractal) Fractais são objetos em que cada parte é semelhante ao objeto como um todo: O objeto é composto por partes reduzidas dele próprio Triângulo de Sierpinski: 1 nível 2 níveis 3 níveis 4 níveis 5 níveis Profundidade 2 Profundidade 3 Profundidade 4 Profundidade 5 49
50 Pensamento Recursivo Como somar estes números? ???? Quebrar o problema em subproblemas menores, de mesma natureza, até alcançar um problema simples o bastante para ser resolvido trivialmente 50
51 Pensamento Recursivo ?
52 Pensamento Recursivo ?
53 Pensamento Recursivo ? 8? 4 53
54 Pensamento Recursivo
55 Pensamento Recursivo ??
56 Pensamento Recursivo
57 Pensamento Recursivo ? 4 57
58 Pensamento Recursivo
59 Pensamento Recursivo
60 Pensamento Recursivo ?
61 Pensamento Recursivo ?
62 Pensamento Recursivo
63 Pensamento Recursivo
64 Pensamento Recursivo Qual foi o caso base? Só um número para somar Qual o passo recursivo? O que fazer com a solução retornada da chamada para o caso mais simples em cada instância? 64
65 Pensamento Recursivo Qual foi o caso base? Só um número para somar Qual o passo recursivo? Somar nºs restantes ( 2º ao último) O que fazer com a solução retornada da chamada para o caso mais simples em cada instância? 65
66 Pensamento Recursivo Qual foi o caso base? Só um número para somar Qual o passo recursivo? Somar nºs restantes ( 2º ao último) O que fazer com a solução retornada da chamada para o caso mais simples em cada instância? Adicionar o 1º número ao total computado pela chamada recursiva 66
67 Processo recursivo para a solução de um problema Divide os problemas em problemas menores de mesma natureza. Natureza do problema Natureza do subproblema Método para solução do problema Método para solução do subproblema Composto de duas partes: O caso trivial, cuja solução é conhecida, e interrompe a recorrência Um método geral, onde há chamada do método para um ou mais problemas menores (subproblemas) de mesma natureza. 67
68 Funções Recursivas Resolve o problema usando como método de solução a recursão. É definida em termos de si mesma, a partir das relações de recorrência e do(s) caso(s) base(s). Regras básicas - No corpo da função há: pelo menos uma condição de parada (testes dos casos bases) chamada de uma cópia de si mesma entregando como argumento um problema mais simples do que o recebido, convergindo para o caso base (passo recursivo) problema def função ( )(:( if caso trivial: return resposta conhecida solprobmaissimples = função( ) retorna a combinação da solução p/o Argumento mais simples com solprobmaissimples 68
69 Funções Recursivas: como funciona? A chamada recursiva é uma nova instância da função (uma "cópia ) parâmetros e variáveis locais são distintos Só os parâmetros/variáveis criados pela função (ou instância) são visíveis. Exemplo: Função SubirEscada Definição Recursiva: subirescada comn degraus parar, n 0 subir1degrau subirescada comn-1degraus, n 0 Do que a função precisa para realizar sua tarefa? 69
70 Funções Recursivas: como funciona? A chamada recursiva é uma nova instância da função (uma "cópia") parâmetros e variáveis locais são distintos Só os parâmetros/variáveis criados pela função (ou instância) são visíveis. Exemplo: Função SubirEscada Definição Recursiva: subirescada comn degraus parar, n 0 subir1degrau subirescada comn-1degraus, n 0 Do que a função precisa para realizar sua tarefa? Do nº de degraus da escada 70
71 Desenvolvendo a Solução def SubirEscada (n) Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) 71
72 def SubirEscada (n): Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) n 4 72
73 def SubirEscada (n): Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) n 4 73
74 def SubirEscada (n): Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) n 4 74
75 def SubirEscada (n): Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) n 3 75
76 def SubirEscada (n): Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) n 3 76
77 def SubirEscada (n): Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) n 3 77
78 def SubirEscada (n): Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) n 2 78
79 def SubirEscada (n): Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) n 2 79
80 def SubirEscada (n): Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) n 2 80
81 def SubirEscada (n): Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) n 1 81
82 def SubirEscada (n): Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) n 1 82
83 def SubirEscada (n): Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) n 1 83
84 def SubirEscada (n): Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) n 0 84
85 def SubirEscada (n): Se n == 0 : chegou no topo da escada/não há escada senão: Subir 1 degrau SubirEscada ( n-1) n 0 85
86 Roteiro Recursivo Para se aplicar a recursividade deve-se pensar na definição recursiva do problema. a) Caso base ( regra de parada): Qual é o caso base? Como reconhecer o caso base? O que deve ser feito no caso base? b) Passo Recursivo: "Como o problema pode ser dividido em problemas menores de mesma natureza? ". O que deve mudar na chamada recursiva para se aproximar do caso base? Como deve mudar na chamada recursiva para convergir para o caso base? c) O que deve ser feito após a chamada recursiva da função, usando o (valor de) retorno da função? 86
87 Resumo: Recursão: Forma Geral Esquematicamente, as funções recursivas têm a seguinte forma: se "condição para o caso de base 1 " então resolução direta para o caso de base 1 <senão se "condição para o caso de base n " então> <resolução direta para o caso de base n > senão divide a instância do problema em (pelo menos) uma mais simples (pelo menos) uma chamada recursiva, com instância menor do que a instância atual do problema, convergindo ao caso base retorna combinação de resultado das chamadas recursivas fimse 87
88 Desenhando a escada com o módulo turtle
89 Desenhando uma escada recursivamente ESCADA + ESCADA 89
90 Desenhando uma escada recursivamente ESCADA + ESCADA 90
91 Desenhando uma escada recursivamente ESCADA + ESCA DA 91
92 Desenhando uma escada recursivamente + ESCA DA 92
93 Exemplo: Função DesenharEscada Desenvolvendo a Solução Definição Recursiva: parar, n 0 desenharescada comn degraus desenhar1degrau desenharescada comn-1degraus, n 0 Do que a função precisa para realizar sua tarefa? alt do 1º degrau ESCADA nº de degraus Pto (x,y) largura do degrau 93
94 Desenhando uma escada: Solução recursiva import turtle def Degrau(t,l,a,x,y): t.goto(x,y) t.begin_fill() t.color('lightsteelblue') for i in range(2): t.fd(l) t.left(90) t.fd(a) t.left(90) t.end_fill() return def Escada(t,n,l,a,x,y): if n == 0: return Degrau(t,l,a,x,y) Escada(t,n-1,l,a+20,x+40,y) return 94
95 Escada(t,3,40,10,-100,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return
96 Escada(t,3,40,10,-100,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return
97 Escada(t,3,40,10,-100,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return
98 Escada(t,3,40,10,-100,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return 98
99 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return Lembre-se: Cada chamada é uma nova instância da função 99
100 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return 100
101 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return 101
102 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return 102
103 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) Escada(t,1,40,50,-20,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return Lembre-se: Cada chamada é uma nova instância da função 103
104 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) Escada(t,1,40,50,-20,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return 104
105 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) Escada(t,1,40,50,-20,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return 105
106 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) Escada(t,1,40,50,-20,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return 106
107 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) Escada(t,1,40,50,-20,0) Escada(t,0,40,70,20,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return Lembre-se: Cada chamada é uma nova instância da função 107
108 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) Escada(t,1,40,50,-20,0) Escada(t,0,40,70,20,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return 108
109 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) Escada(t,1,40,50,-20,0) Escada(t,0,40,70,20,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return 109
110 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) Escada(t,1,40,50,-20,0) Escada(t,0,40,70,20,0) 110
111 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) Escada(t,1,40,50,-20,0) n l a X y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return 111
112 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) Escada(t,1,40,50,-20,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return 112
113 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) Escada(t,1,40,50,-20,0) 113
114 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return 114
115 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return 115
116 Escada(t,3,40,10,-100,0) Escada(t,2,40,30,-60,0) 116
117 Escada(t,3,40,10,-100,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return
118 Escada(t,3,40,10,-100,0) n l a x y if n == 0: return Degrau(t,l,a,x,y) Escada(t,l,a+20,n-1,x+40,y) return
119 119
120 Complete o exercício 1. Crie a função recursiva subirescada que recebe a tartaruga, o número de degraus e as coordenadas do ponto inicial da escada 2. Utilize as funções: def sobedegrau(t,x,y): bola(t,'white') t.up() t.goto(x+25,y) bola(t,'yellow') return 3. Para testar sua função utilize o script: t=turtle.turtle() t.hideturtle() Escada(t,10,40,10,-100,0) t.goto(-112,0) bola(t,'yellow') subirescada(t,10,-110,12) def bola(t,cor): t.color(cor) t.begin_fill() t.down() t.circle(10) t.end_fill() return 120
121 Função SubirEscada Recursiva import turtle def sobedegrau(t,x,y): bola(t,'white') t.up() t.goto(x+25,y) bola(t,'yellow') return def subirescada(t,n,x,y): if n == 0: return sobedegrau(t,x,y) subirescada(t,n-1,x+40,y+20) return 121
122 Interpretação Recursiva de um número no sistema decimal
123 Sistema decimal No sistema decimal, como qualquer sistema posicional, o valor de cada algarismo depende do lugar que ele ocupa na escrita do número. Partindo da primeira casa, da direita para a esquerda, cada posição determina a multiplicação do algarismo por uma potência de 10 (1, 10, 100, ). Número sequência de algarismos 123
124 Interpretação Recursiva de um número no sistema decimal Um número no sistema decimal é: um algarismo ou um algarismo precedido por um nº Número alg
125 Mãos na massa!! Crie uma função recursiva para exibir os algarismos de um número positivo verticalmente Exemplo: Qual é o caso base? Qual o passo recursivo O que fazer com a solução retornada da chamada para o caso mais simples em cada instância? 125
126 Desenvolvendo a solução Qual é o caso base? Nº <10 apenas um algarismo Qual o passo recursivo? Separar a unidade, chamar para o número formado pelos algarismo sem a unidade O que fazer com a solução retornada da chamada para o caso mais simples em cada instância? Exibir a unidade do Nº impvertical ( número) exibir, número 10 impvertical( número//10) e exibir a unidadedonúmero, número
127 Escrever um número na vertical def ImpVertical(num): if num < 10: print(num) return ImpVertical(num//10) # separa o número que precede a unidade print(num%10) return # separa a unidade do número Número alg 127
128 impvertical(326) num if num < 10: 326 print(num) return impvertical(num//10) print(num%10) return _ 128
129 impvertical(326) num if num < 10: 326 print(num) return impvertical(num//10) print(num%10) return _ 129
130 impvertical(326) num if num < 10: 326 print(num) return impvertical(num//10) print(num%10) return _ 130
131 impvertical(326) impvertical(32) num if num <10: 32 print(num) return impvertical(num//10) print(num%10) return _ 131
132 impvertical(326) impvertical(32) num if num < 10: 32 print(num) return impvertical(num//10) print(num%10) return _ 132
133 impvertical(326) impvertical(32) num if num < 10: 32 print(num) return impvertical(num//10) print(num%10) return _ 133
134 impvertical(326) impvertical(32) _ impvertical(3) num if num < 10: 3 print(num) return impvertical(num//10) print(num%10) return 134
135 impvertical(326) impvertical(32) _ impvertical(3) num if num < 10: 3 print(num) return impvertical(num//10) print(num%10) return 135
136 impvertical(326) impvertical(32) 3 impvertical(3) num if num < 10: 3 print(num) return impvertical(num//10) print(num%10) return 136
137 impvertical(326) impvertical(32) 3 impvertical(3) num if num < 10: 3 print(num) return impvertical(num//10) print(num%10) return 137
138 impvertical(326) impvertical(32) 3 impvertical(3) 138
139 impvertical(326) impvertical(32) num if num < 10: 32 print(num) return impvertical(num//10) print(num%10) return 3 139
140 impvertical(326) impvertical(32) num if num <10: 32 print(num) return impvertical(num//10) print(num%10) return
141 impvertical(326) impvertical(32)
142 impvertical(326) num if num < 10: 326 print(num) return impvertical(num//10) print(num%10) return
143 impvertical(326) num if num < 10: 326 print(num) return impvertical(num//10) print(num%10) return
144 impvertical(326) num if num < 10: 326 print(num) return impvertical(num//10) print(num%10) return
145 impvertical(326)
146 O que muda para escrever um número de forma invertida, na vertical? def ImpVertical(num): if num < 10: print(num) return ImpVertical(num//10) # separa o número que precede a unidade # separa a unidade do número print(num%10) return O que muda para exibir o número invertido, verticalmente? Número alg impvertical ( número) exibir, número 10 impverticalnúmero ( //10) e exibir a unidadedonúmero, número
147 Uma Solução def ImpInvVertical(num): if num < 10: print(num) return print(num%10) ImpInvVertical(num//10) return # exibe a unidade do número # separa o núm que precede a unidade Número alg impinvvertical(número) exibir, número 10 exibir a unidadedonúmeroe impinvvertical( número//10), número
148 Exercícios 1) Crie uma função recursiva para contar algarismos de um número inteiro 2) Crie uma função recursiva para contar quantos algarismos 2 o número possui 3) Crie uma função recursiva para contar quantos algarismos iguais a um algarismo recebido, o número possui 4) Crie uma função recursiva que verifique se um número possui o algarismo 2. Esta função retorna True se o algarismo 2 ao número, False caso contrário 5) DESAFIOS a) Crie uma função que retorne o menor algarismo de um número b) Crie uma função recursiva que receba um número n e troque o 1º algarismo do número com o 2º, o 3º algarismo com o 4º, e assim sucessivamente 148
149 Desenvolvendo a Solução 1) Crie uma função recursiva para contar algarismos de um número inteiro Qual é o caso base? Nº com 1 algarismo (Nº <10), retornar 1 Qual o passo recursivo? Separar a unidade, chamar para Nº//10 O que fazer com a solução retornada da chamada para o caso mais simples em cada instância? Somar 1 à quantidade de algarismos contada pela chamada recursiva 149
150 Contar algarismos de um número Definição recursiva para contar algarismos de um número: 1, n 10 qtalg( n) 1 qtalg( n //10), n 10 Número alg 150
151 Solução Recursiva def contaalg (num): if num <10: return 1 qt=contaalg(num//10) return 1 + qt OU def contaalg (num): if num <10: return 1 return 1 + contaalg(num//10) 151
152 contaalg(326) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num
153 contaalg(326) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num
154 contaalg(326) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num
155 contaalg(326) contaalg(32) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num
156 contaalg(326) contaalg(32) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num
157 contaalg(326) contaalg(32) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num
158 contaalg(326) contaalg(32) contaalg(3) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num 3 158
159 contaalg(326) contaalg(32) contaalg(3) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num 3 159
160 contaalg(326) contaalg(32) contaalg(3) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num 3 160
161 contaalg(326) contaalg(32) contaalg(3) 1 161
162 contaalg(326) contaalg(32) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num 32 qt 162
163 contaalg(326) contaalg(32) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num qt
164 contaalg(326) contaalg(32) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num qt
165 contaalg(326) contaalg(32) 2 165
166 contaalg(326) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num 326 qt 166
167 contaalg(326) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num qt
168 contaalg(326) if num <10: return 1 qt = contaalg(num//10) return 1 + qt num qt
169 3 contaalg(326) 169
170 Interpretação Recursiva de uma sequência de caracteres
171 Interpretação recursiva de uma string Uma cadeia de caracteres é: uma sequência de caracteres vazia ou um caractere seguido de uma cadeia de caracteres ou car string T a l um caractere precedido por uma sequência de caracteres string car T a l 171
172 Mãos na massa!! Crie uma função que conte as letras maiúsculas de uma frase a) Caso base ( regra de parada) : Qual é o caso base? Como reconhecer o caso base? O que deve ser feito no caso base? b) Passo Recursivo: "Como o problema pode ser dividido em problemas menores de mesma natureza? ". O que deve mudar na chamada recursiva para se aproximar do caso base? Como deve mudar na chamada recursiva para convergir para o caso base? c) O que deve ser feito após a chamada recursiva da função, usando o (valor de) retorno da função? 172
173 Desenvolvendo a solução Qual é o caso base? string vazia Qual o passo recursivo? string[1:] O que fazer com a solução retornada da chamada para o caso mais simples em cada instância? Testar se o 1º caractere é letra maiúscula e somar 1 se for 173
174 Uma Solução def contamai(palavra): if not palavra: return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt print(contamai('f1m!')) 174
175 Uma Solução def contamai(palavra): if not palavra: return 0 qt=contamai(palavra[1:]) Em Python, a string vazia tem valor lógico False!!! if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt print(contamai('f1m!')) 175
176 contamai('f1m!') def contamai(pal): pal if not palavra: F1M! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 176
177 contamai('f1m!') def contamai(pal): pal if not palavra: F1M! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 177
178 contamai('f1m!') def contamai(pal): pal if not palavra: F1M! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 178
179 contamai('f1m!') contamai('1m!') def contamai(pal): pal if not palavra: 1M! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 179
180 contamai('f1m!') contamai('1m!') def contamai(pal): pal if not palavra: 1M! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 180
181 contamai('f1m!') contamai('1m!') def contamai(pal): pal if not palavra: 1M! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 181
182 contamai('f1m!') contamai('1m!') contamai('m!') def contamai(pal): pal if not palavra: M! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 182
183 contamai('f1m!') contamai('1m!') contamai('m!') def contamai(pal): pal if not palavra: M! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 183
184 contamai('f1m!') contamai('1m!') contamai('m!') def contamai(pal): pal if not palavra: M! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 184
185 contamai('f1m!') contamai('1m!') contamai('m!') contamai('!') def contamai(pal): pal if not palavra:! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 185
186 contamai('f1m!') contamai('1m!') contamai('m!') contamai('!') def contamai(pal): pal if not palavra:! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 186
187 contamai('f1m!') contamai('1m!') contamai('m!') contamai('!') def contamai(pal): pal if not palavra:! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 187
188 contamai('f1m!') contamai('1m!') contamai('m!') contamai('!') contamai('') def contamai(pal): pal if not palavra: '' return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 188
189 contamai('f1m!') contamai('1m!') contamai('m!') contamai('!') contamai('') def contamai(pal): pal if not palavra: '' return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 189
190 contamai('f1m!') contamai('1m!') contamai('m!') contamai('!') contamai('') def contamai(pal): pal if not palavra: '' return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 190
191 contamai('f1m!') contamai('1m!') contamai('m!') contamai('!') contamai('') 0 191
192 contamai('f1m!') contamai('1m!') contamai('m!') contamai('!') def contamai(pal): pal if not palavra:! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 192
193 contamai('f1m!') contamai('1m!') contamai('m!') contamai('!') def contamai(pal): pal qt if not palavra:! 0 return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 193
194 contamai('f1m!') contamai('1m!') contamai('m!') contamai('!') def contamai(pal): pal qt if not palavra:! 0 return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 194
195 contamai('f1m!') contamai('1m!') contamai('m!') contamai('!') def contamai(pal): pal qt if not palavra:! 0 return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 195
196 contamai('f1m!') contamai('1m!') contamai('m!') contamai('!') 0 196
197 contamai('f1m!') contamai('1m!') contamai('m!') def contamai(pal): pal if not palavra: M! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 197
198 contamai('f1m!') contamai('1m!') contamai('m!') def contamai(pal): pal qt if not palavra: M! 0 return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 198
199 contamai('f1m!') contamai('1m!') contamai('m!') def contamai(pal): pal qt if not palavra: M! 0 return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 199
200 contamai('f1m!') contamai('1m!') contamai('m!') def contamai(pal): pal qt if not palavra: M! 0 return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 200
201 contamai('f1m!') contamai('1m!') contamai('m!') 1 201
202 contamai('f1m!') contamai('1m!') def contamai(pal): pal if not palavra: 1M! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 202
203 contamai('f1m!') contamai('1m!') def contamai(pal): if not palavra: return 0 qt=contamai(palavra[1:]) pal 1M! qt 1 if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 203
204 contamai('f1m!') contamai('1m!') def contamai(pal): if not palavra: return 0 qt=contamai(palavra[1:]) pal 1M! qt 1 if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 204
205 contamai('f1m!') contamai('1m!') def contamai(pal): if not palavra: return 0 qt=contamai(palavra[1:]) pal 1M! qt 1 if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 205
206 contamai('f1m!') contamai('1m!') 1 206
207 contamai('f1m!') def contamai(pal): pal if not palavra: F1M! return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 207
208 contamai('f1m!') def contamai(pal): pal qt if not palavra: F1M! 1 return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 208
209 contamai('f1m!') def contamai(pal): pal qt if not palavra: F1M! 1 return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 209
210 contamai('f1m!') def contamai(pal): pal qt if not palavra: F1M! 1 return 0 qt=contamai(palavra[1:]) if palavra[0]>='a' and palavra[0]<='z': return 1+qt else: return qt 210
211 contamai('f1m!') 2 211
212 Exercícios 1. Crie uma função recursiva que exiba verticalmente uma string 2. Crie uma função recursiva que receba uma string e retorne outra string repetindo os caracteres. Ex: prog1 => pprroogg11 3. Faça um programa que leia uma string e crie uma outra string repetindo apenas as vogais. Ex: carro => caarroo 4. Crie uma função recursiva que receba uma string e retorne uma nova string com os espaços substituídos por '#' 5. DESAFIO: Crie uma função recursiva que receba duas strings e retorne quantas vezes a segunda string ocorre na primeira 6. DESAFIO: Crie uma função recursiva que conte quantos 'c' há em uma string, a partir da posição k (também recebida) 212
213 Desenvolvendo a solução do ex. 1 1.Crie uma função recursiva que exiba verticalmente uma string a) Caso base ( regra de parada) : Qual é o caso base? Como reconhecer o caso base? O que deve ser feito no caso base? b) Passo Recursivo: "Como o problema pode ser dividido em problemas menores de mesma natureza? ". O que deve mudar na chamada recursiva para se aproximar do caso base? Como deve mudar na chamada recursiva para convergir para o caso base? c) O que deve ser feito após a chamada recursiva da função, usando o (valor de) retorno da função? 213
214 Desenvolvendo a solução do ex. 1 Qual é o caso base? string vazia Qual o passo recursivo? exibir o 1º caractere, chamar para string[1:] O que fazer com a solução retornada da chamada para o caso mais simples em cada instância? nada 214
215 Uma Solução do ex. 1 def exibevertical(palavra): if not palavra: return print(palavra[0]) exibevertical(palavra[1:]) return exibevertical('palavra') 215
216 Outros Exercícios 1) Cálculo do mdc entre dois números, usando o algoritmo de Euclides. a)escrever a definição recursiva b) criar uma função para testá-la 2) Seja uma linguagem hipotética na qual não existem operadores para adição, nem subtração. Sabe-se que nesta linguagem, existe uma função prox(n) que dá o sucessor do número n e existe também uma função ant(n) que dá o predecessor de um número n. Usando apenas essas funções (prox e ant), defina a função recursiva soma(x,y), que toma como argumento os números naturais x e y e retorna sua soma. 216
Lista de Exercícios sobre Recursividade
Lista de Exercícios sobre Recursividade 1) Dado os algoritmos recursivos abaixo, apresente suas funções de complexidade de tempo. a) void Pesquisa(int n) if (n > 1) Inspecione n*n*n elementos; // custo
Leia maisAula prática 5. Funções Recursivas
Programação Funcional UFOP DECOM 2014.1 Aula prática 5 Funções Recursivas Resumo Definições recursivas são comuns na programação funcional. Nesta aula vamos aprender a definir funções recursivas. Sumário
Leia maisIntrodução a Algoritmos Parte 08
Universidade Federal do Vale do São Francisco Curso de Engenharia de Computação Introdução a Algoritmos Parte 08 (Baseado no Material do Prof. Marcelo Linder) Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br
Leia maisALGORITMOS I. Procedimentos e Funções
Procedimentos e Funções Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 1 MÓDULOS São blocos de instruções que realizam tarefas específicas. Carregado uma vez e pode ser executado quantas vezes
Leia maisALGORITMOS AVANÇADOS UNIDADE II Recursividade. Luiz Leão
Luiz Leão luizleao@gmail.com http://www.luizleao.com Conteúdo Programático 2.1 - Definições recursivas 2.2 - Como implementar recursividade 2.3 - Quando não usar recursividade 2.4 - Desenvolvendo algoritmos
Leia maisRecursão. Dados recursivos
Vimos nas aulas passadas o que é recursão: resolução de um problema usando a solução de um problema semelhante (geralmente de menor dimensão); Um fractal é uma figura que tem estruturas semelhantes a si
Leia maisUSANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio
USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS Bruno Maffeo Departamento de Informática PUC-Rio MÉTODO INDUTIVO O método indutivo para resolver problemas aqui empregado inspira-se na formulação mais
Leia maisNúmeros Inteiros Algoritmo da Divisão e suas Aplicações
Números Inteiros Algoritmo da Divisão e suas Aplicações Diferentemente dos números reais (R), o conjunto dos inteiros (Z) não é fechado para a divisão. Esse não-fechamento faz com que a divisão entre inteiros
Leia maisUNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO TEORIA DA COMPUTAÇÃO Aula 04 Programa Recursivo e Máquinas Prof.ª Danielle Casillo Funções recursivas Alguma função é recursiva quando
Leia maisAlgoritmos e Estruturas de Dados I Linguagem C
Algoritmos e Estruturas de Dados I (DCC/003) Algoritmos e Estruturas de Dados I Linguagem C Aula Tópico 11 Recursividade 1 Recursão Na linguagem C, uma função pode chamar outra função. A função main()
Leia mais04 Recursão SCC201/501 - Introdução à Ciência de Computação II
04 Recursão SCC201/501 - Introdução à Ciência de Computação II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2010/2 Moacir Ponti Jr. (ICMCUSP) 04Recursão
Leia maisProgramação I Aula 16 Mais exemplos de recursão Pedro Vasconcelos DCC/FCUP
Programação I Aula 16 Mais exemplos de recursão DCC/FCUP DCC/FCUP 2019 1/ 28 Nesta aula 1 Desenhar árvores 2 Calcular potências 3 Ordenação Quicksort DCC/FCUP 2019 2/ 28 Desenhar árvores Vamos fazer uma
Leia maisOficina: Programação para Android com o App Inventor. Profª. Alana Gama Licencianda em Ciências da Computação IF Baiano Campus Senhor do Bonfim
Oficina: Programação para Android com o App Inventor Profª. Alana Gama Licencianda em Ciências da Computação IF Baiano Campus Senhor do Bonfim Desenvolver o quinto Item da lista (Programação) Testa uma
Leia mais1ª Lista de Exercícios
Universidade Federal do Rio de Janeiro Data: 26/04/05 Disciplina: Computação I 1ª Lista de Exercícios 1) Faça um programa, em pseudo-código, que peça ao usuário que informe n números reais e então calcule
Leia maisBCC201 Introdução à Programação ( ) Prof. Reinaldo Silva Fortes. Prática 05 Modularização
BCC Introdução à Programação (4-) Prof. Reinaldo Silva Fortes Funções: Passagem de parâmetros. Prática 5 Modularização ) Escreva uma função que receba um número inteiro e imprima o mês correspondente ao
Leia maisProf. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35
INE5603 Introdução à POO Prof. A. G. Silva 25 de setembro de 2017 Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de 2017 1 / 35 Baseado em materiais da Recursividade Unisinos, Cesar Tacla (UTFPR),
Leia maisLista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013
Lista 1 - PMR2300 Fabio G. Cozman 3 de abril de 2013 1. Qual String é impressa pelo programa: p u b l i c c l a s s What { p u b l i c s t a t i c void f ( i n t x ) { x = 2 ; p u b l i c s t a t i c void
Leia maisRecursividade. Objetivos do módulo. O que é recursividade
Recursividade Objetivos do módulo Discutir o conceito de recursividade Mostrar exemplos de situações onde recursividade é importante Discutir a diferença entre recursividade e iteração O que é recursividade
Leia maisLista de Exercícios 5 Funções e Strings
Lista de Exercícios 5 Funções e Strings 1. Faça a função calcula_percent, que recebe como parâmetros dois valores, um valor real e um percentual inteiro, retornando o percentual deste valor. Por exemplo,
Leia maisALGORITMOS E APLICAÇÕES. FATEC IPIRANGA ADS Noturno 1º semestre de 2012 Prof. Luiz Carlos de Jesus Junior
ALGORITMOS E APLICAÇÕES FATEC IPIRANGA ADS Noturno 1º semestre de 2012 Prof. Luiz Carlos de Jesus Junior Formato Básico do Pseudocódigo Tipos de dados O VisuAlg prevê quatro tipos de dados: inteiro, real,
Leia maisAlgoritmos e Programação. AULA 21: Recursividade UNIVERSIDADE FEDERAL DE PELOTAS CENTRO DE DESENVOLVIMENTO TECNOLÓGICO CIÊNCIA DA COMPUTAÇÃO
1 Algoritmos e Programação AULA 21: Recursividade UNIVERSIDADE FEDERAL DE PELOTAS CENTRO DE DESENVOLVIMENTO TECNOLÓGICO CIÊNCIA DA COMPUTAÇÃO 2 Recursividade A recursão é o processo pelo qual passa um
Leia maisListas: Sequências Mutáveis
Listas: Sequências Mutáveis Operações em sequências string: sequência imutável, lista: sequência mutável coleção ordenada e iterável de itens! Operações válidas em sequências: concatenação replicação pertinência
Leia maisFundamentos de programação
Fundamentos de programação Recursividade Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno O que é recursividade? Técnica baseada em divisão e conquista Buscar solucionar o problema dividindo
Leia maisSub-algoritmos (ou Funções)
Sub-algoritmos (ou Funções) Quando se deseja fazer um algoritmo cujo processo é composta por diversas etapas, costuma-se dividir o algoritmo em partes, cada uma realizando uma determinada função Cada uma
Leia maisLista de Exercícios 06 Modularização (Procedimentos e Funções)
Lista de Exercícios 06 Modularização (Procedimentos e Funções) Procedimentos: Passagem de parâmetros. 1) Escreva um procedimento que receba um número inteiro e imprima o mês correspondente ao número. Por
Leia maisRecursividade. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR
Recursividade David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Conceito de Recursividade Fundamental em Matemática e Ciência da Computação Um programa recursivo é um programa que chama a si
Leia maisBruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Recursividade
Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Recursividade Conceito de Recursividade Fundamental em Matemática e Ciência da Computação Um programa recursivo é um programa que chama a si mesmo
Leia maisEstruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.
1 Estruturas da linguagem C 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões. Identificadores Os identificadores seguem a duas regras: 1. Devem ser começados por letras
Leia maisPython: Recursão. Claudio Esperança
Python: Recursão Claudio Esperança Recursão É um princípio muito poderoso para construção de algoritmos A solução de um problema é dividido em Casos simples: São aqueles que podem ser resolvidos trivialmente
Leia maisUniversidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem Python
Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem Python Exercícios: Funções 1. Crie uma função que recebe como parâmetro um número
Leia maisProf. Natalia Castro Fernandes Mestrado em Telecomunicações UFF 2º semestre/2012
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações UFF 2º semestre/2012 Operações básicas + - / * ** ou pow(a,b) % = ==,!=, , = or, and, not Valor dos operadores 10/3 10.0/3 10/3.0 10%3
Leia maisAlgoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição
Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição 1 Comando while Deseja-se calcular o valor de: 1 + 2 + 3 +... + N. Observação: não sabemos, a priori, quantos termos
Leia maisUNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO Prof.ª Danielle Casillo Diferentes computadores podem ter diferentes arquiteturas e os diversos tipos de linguagem de programação.
Leia maisFundamentos de Programação em Python
Fundamentos de Programação em Python Diego Silveira Costa Nascimento Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte diego.nascimento@ifrn.edu.br 23 de junho de 2017 Ementa do
Leia maisINE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/30 3 - INDUÇÃO E RECURSÃO 3.1) Indução Matemática 3.2)
Leia maisLista 2 - PMR2300/3200
Lista 2 - PMR2300/3200 Fabio G. Cozman, Thiago Martins 8 de março de 2015 1. Qual String é impressa pelo programa: p u b l i c c l a s s What { p u b l i c s t a t i c void f ( i n t x ) { x = 2 ; p u
Leia maisComputação 1 - Python Aula 1 - Prática: Primeiros Passos - Função 1/ 19
Computação 1 - Python Aula 1 - Prática: Primeiros Passos - Função 1/ 19 Python - Modo Interativo Experiência com programação e uso do computador 2/ 19 Primeiros Passos - Operadores adição + subtração multiplicação
Leia maisProcessamento da Informação
Processamento da Informação Fabrício Olivetti de França 02 de Fevereiro de 2019 Topics 1. Tipos Padrões 2. Variáveis Auxiliares 3. Condicionais 1 Tipos Padrões Tipos Padrões A linguagem Python fornece
Leia maisFundamentos de Programação Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte 15 de maio de 2018.
1 INSTRUÇÃO DE SAÍDA Fundamentos de Programação Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte 15 de maio de 2018 Exercícios 1 Instrução de Saída 1. Implementar um programa
Leia maisProgramação de Computadores 1 Lista 2. Prof. Álvaro A. F. de Souza DECSI - ICEA - UFOP
Programação de Computadores 1 Lista 2 Prof. Álvaro A. F. de Souza DECSI - ICEA - UFOP 0.1 Vetores e Cadeias de Caracteres 1. Codifique um programa que leia e armazene duas notas de 10 alunos e calcule
Leia maisUniversidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Recursão em C
Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Recursão em C Material preparado pela profa Silvana Maria Affonso de Lara 2º semestre de 2010 ROTEIRO DA AULA Definição
Leia maisFabio G. Cozman, Thiago Martins 2017
Lista 1 - adendo - PMR3201 Fabio G. Cozman, Thiago Martins 2017 Exercícios 1. (P1 2016) A listagem a seguir mostra o código de uma função que converte uma cadeia de caracteres com a representação decimal
Leia maisESTRUTURAS DE REPETIÇÃO - PARTE 2
AULA 16 ESTRUTURAS DE REPETIÇÃO - PARTE 2 16.1 A seqüência de Fibonacci Um problema parecido, mas ligeiramente mais complicado do que o do cálculo do fatorial (veja as notas da Aula 14), é o do cálculo
Leia maisUniversidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções
Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: funções Prof. Renato Pimentel 1 Subprogramas Subprograma: programa que auxilia o programa principal na realização de uma determinada
Leia maisALGORITMOS AULA 2. Profª Amanda Gondim
ALGORITMOS AULA 2 Profª Amanda Gondim LINEARIZAÇÃO DE EXPRESSÕES Para a construção de algoritmos que realizam cálculo matemáticos, todas as expressões aritméticas devem ser linearizadas, ou seja, colocadas
Leia maisRecursividade Exaustiva e Backtracking
Universidade Federal do Espírito Santo Centro de Ciências Agrárias CCA UFES Departamento de Computação Recursividade Exaustiva e Tópicos Especiais em Programação Site: http://jeiks.net E-mail: jacsonrcsilva@gmail.com
Leia maisIntrodução à Programação / Programação I
Introdução à Programação / Programação I Aula 18: Definições recursivas Rita P. Ribeiro 2017/2018 Departamento de Ciência de Computadores Nesta aula 1. Definições recursivas 2. Exemplos INTRODUÇÃO À PROGRAMAÇÃO
Leia maisRecursão PROGRAMAÇÃO EM LÓGICA. Recursão. Sonho Recursivo. Recursão. Recursão. Linguagem Prolog Parte IV
PROGRAMAÇÃO EM LÓGICA Recursão CIÊNCIA DA COMPUTAÇÃO FACAPE Faculdade de Ciências Aplicadas e Sociais de Petrolina Linguagem Prolog Parte IV Usado desde a arte (em figuras, telas, etc) como também em Matemática
Leia maisTipo de argumentos. valor. argumentos
Operação Numero de argumentos Tipo de argumentos valor (+ ) 2 ou + Numérico Soma ( ) 2 ou + Numérico Subtração ( ) 1 Numérico Simétrico (/ ...) 2 ou + Numérico Divisão (cos
Leia maisProgramação II RECURSÃO
Programação II RECURSÃO Bruno Feijó Dept. de Informática, PUC-Rio Motivação Escher: Metamorphosis (1937) - Drawing Hands (1948) Relativity (1953) http://www.worldofescher.com/gallery/ Alguém diz: Esta
Leia maisAlgoritmos e Programação
Algoritmos e Programação Aula 9 Subalgoritmos, funções e passagem de parâmetros Profa. Marina Gomes marinagomes@unipampa.edu.br 22/06/2017 Engenharia de Computação - Unipampa 1 Modularização Facilita a
Leia maisProgramação Estruturada
Programação Estruturada Recursão Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Recursão Recursão 1 Recursão 2
Leia maisAlgoritmos de Ordenação
Algoritmos de Ordenação! Problema: encontrar um número de telefone em uma lista telefônica! simplificado pelo fato dos nomes estarem em ordem alfabética! e se estivesse sem uma ordem?! Problema: busca
Leia maisProcessamento da Informação
Processamento da Informação Fabrício Olivetti de França 02 de Fevereiro de 2019 Topics 1. Recursão 1 Recursão Indução Matemática Em bases matemáticas vocês aprenderam sobre indução matemática: Provamos
Leia maisLinguagem de programação métodos/funções
Instituto Federal de Minas Gerais Campus Ponte Nova Linguagem de programação métodos/funções Professor: Saulo Henrique Cabral Silva MÉTODOS / MODULARIZANDO Modularizando... 2 Métodos Funções Sub-rotinas
Leia maisCADERNO DE EXERCÍCIOS ALGORITMOS
J. EXERCÍCIOS SOBRE MODULARIZAÇÃO 77. Faça uma função que recebe um número inteiro por parâmetro e retorna verdadeiro se ele for par e falso se for ímpar. 78. Escreva um programa que leia o raio de um
Leia maisProcessamento da Informação Estruturas de seleção simples e composta
Processamento da Informação Estruturas de seleção simples e composta Prof. Jesús P. Mena-Chalco CMCC/UFABC Q1/2017 1 Expressões Booleanas 2 Fonte: http://pt.wikipedia.org/wiki/george_boole Expressões Booleanas
Leia maisProva 1 PMR3201 Computação para Automação 1o. semestre 2016 Prof. Thiago de Castro Martins
Prova 1 PMR3201 Computação para Automação 1o. semestre 2016 Prof. Thiago de Castro Martins 1. (25 pontos) A listagem a seguir mostra o código de uma função que converte uma cadeia de caracteres com a representação
Leia maisOcorrem em três tipos:
Ocorrem em três tipos: Numéricas: Representadas por todos os números do universo dos números reais Ex.: 2, 3.45, -6.78 Literais: Ocorrem em dois tipos: Strings: Qualquer sequência de até 256 caracteres
Leia maisComputação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa
Computação Eletrônica Tipos de dados, constantes, variáveis, operadores e expressões Prof: Luciano Barbosa Site da disciplina: www.cin.ufpe.br/~if165/ Recapitulando num cubo = n * n * n cubo Algoritmo
Leia mais1. Considere o polígono irregular abaixo, formado por três retângulos e um triângulo.
1. Considere o polígono irregular abaixo, formado por três retângulos e um triângulo. a Crie a função arearetangulo: recebe os lados de um retângulo e retorna a área b Crie a função hipotenusa(cateto1,cateto2
Leia maisModularização. Prof. Antonio Almeida de Barros Junior
Modularização Prof. Antonio Almeida de Barros Junior 1 Modularização A modularização consiste em decompor um programa em uma série de subprogramas individuais; Trata-se de um método utilizado para facilitar
Leia maisAnálise e Complexidade de Algoritmos
Análise e Complexidade de Algoritmos Principais paradigmas do projeto de algoritmos - Recursividade - Tentativa e erro - Divisão e Conquista - Programação dinâmica - Algoritmos Gulosos e de Aproximação
Leia maisVariáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.
Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre@ifc-araquari.edu.br marcoandre@gmail.com marcoandre.googlepages.com Algoritmos é a base Primeiro programa Este programa possui apenas uma
Leia maisimprimir seus quadrados.
1) Dada uma seqüência de números inteiros não-nulos, seguida por 0, imprimir seus quadrados. int numero, /* usada para leitura da sequencia */ quadrado; /* guarda o quadrado do numero lido */ printf("\n\tcalculo
Leia maisAula 13 Oficina de Programação Modularização. Profa. Elaine Faria UFU
Aula 13 Oficina de Programação Modularização Profa. Elaine Faria UFU - 2017 O que é modularização? No século XIX, Henry Ford, para baratear e massificar a montagem de carros, criou uma base modular. Esta
Leia maisLista de Exercícios de Algoritmos - 04 Para cada um dos exercícios abaixo, faça um programa (em laboratório) que teste a função.
Lista de Exercícios de Algoritmos - 04 Para cada um dos exercícios abaixo, faça um programa (em laboratório) que teste a função. Funções e estruturas básicas 1. Faça uma função que recebe a idade de uma
Leia maisINE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/14 3 - INDUÇÃO E RECURSÃO 3.1) Indução Matemática 3.2)
Leia maisAula 2: Algoritmos: Intuição
Aula 2: Algoritmos: Intuição Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Algoritmos: Intuição Programação de Computadores IV 1 / 27 Agenda 1 Revisão
Leia maisESTRUTURAS DE REPETIÇÃO - PARTE 1
AULA 15 ESTRUTURAS DE REPETIÇÃO - PARTE 1 15.1 O comando enquanto-faca- Considere o problema de escrever um algoritmo para ler um número inteiro positivo, n, e escrever todos os números inteiros de 1 a
Leia maisLógica e Linguagem de Programação Aula 04 - Estruturas de Repetição Repetição com Teste no Início Enquanto - GABARITO Professor: Danilo Giacobo
Lógica e Linguagem de Programação Aula 04 - Estruturas de Repetição Repetição com Teste no Início Enquanto - GABARITO Professor: Danilo Giacobo Este guia irá lhe ajudar a entender o laço de repetição enquanto.
Leia maisAnálise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo (
Análise de Problemas Recursivos Algoritmos e Estruturas de Dados 2 2017-1 Flavio Figueiredo (http://flaviovdf.github.io) 1 Lembrando de Recursividade Procedimento que chama a si mesmo Recursividade permite
Leia maisManipulação de Strings
Manipulação de Strings Prof. Wylliams Barbosa Santos wylliamss@gmail.com Introdução à Programação Crédito de Conteúdo: Professora Ceça Moraes Agenda String Conceitos Operações Métodos Exemplos Exercícios
Leia maisProgramação I Aula 19 Aritmética com racionais Pedro Vasconcelos DCC/FCUP
Programação I Aula 19 Aritmética com racionais DCC/FCUP DCC/FCUP 2019 1/ 30 Nesta aula 1 Aritmética com racionais 2 Simplificação 3 Operações 4 Comparações DCC/FCUP 2019 2/ 30 Aritmética com racionais
Leia maisExercícios: Recursão
Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de programação em linguagem C Exercícios: Recursão 1. Faça uma função recursiva que calcule e retorne o fatorial
Leia maisNúmeros são números, letras são números e sinais de pontuação, símbolos e até mesmo as instruções do próprio computador são números.
Para o computador, tudo são números. Números são números, letras são números e sinais de pontuação, símbolos e até mesmo as instruções do próprio computador são números. O método ao qual estamos acostumados
Leia maisINSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS. Aluno (s): 01 ATIVIDADE. Revisão de Conteúdo
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS DISCIPLINA: Lab. de Programação PROF: MSc. Flávio Barros PERÍODO: 2 DATA: Aluno (s): 01 ATIVIDADE / / Revisão de Conteúdo
Leia maisInformática Portugol IDE Revisão 1
exatasfepi.com.br Informática Portugol IDE Revisão 1 André Luís Duarte Honra a teu pai e a tua mãe (que é o primeiro mandamento com promessa), para que te vá bem, e sejas de longa vida sobre a terra.(ef
Leia maisModularização de Programas
Modularização de Programas SSC 304 - Introdução à Programação para Engenharias Profa. Dra. Elisa Yumi Nakagawa Slides inicialmente preparados pela Profa. Dra. Simone Souza MODULARIZAÇÃO Um problema complexo
Leia maisUniversidade Federal do ABC Programação Estruturada Fabrício Olivetti França Lista de Exercícios 02
1 Objetivos da lista Universidade Federal do ABC Programação Estruturada Fabrício Olivetti França Lista de Exercícios 02 Esta lista de exercícios tem como objetivo introduzir funções na linguagem C. Como
Leia maisINFORMÁTICA APLICADA AULA 03 ALGORITMOS
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: Bacharelado em Ciências e Tecnologia INFORMÁTICA APLICADA AULA 03 ALGORITMOS Profª ª Danielle Casillo LINEARIZAÇÃO DE EXPRESSÕES Para a construção de algoritmos
Leia maisLinguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013
Linguagem Haskell Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação Tiago Carneiro 19 Agosto 2013 1 1 Linguagem Haskell Linguagem de programação funcional É um paradigma de programação
Leia maisLógica de Programação
Lógica de Programação Aula 2 Conhecendo o Ruby Clenisson Calaça Variáveis Mais Ruby Já sabemos como atribuir um valor a uma variável escrevendo o seu identificador seguido
Leia maisPython Funções. Introdução à Programação SI1
Python Funções Introdução à Programação SI1 Conteúdo Funções Conceitos Objetivos Modularização Exemplos Exercícios 2 Funções O que são? Qual a função de uma função? 3 Imagine o código 4 Imagine o código
Leia maisAula 05. Modularização Função Subrotina Recursividade
Logo Aula 05 Modularização Função Subrotina Recursividade 2 Modularização A modularização é um processo que aborda os aspectos da decomposição de algoritmos em módulos. Módulo é um grupo de comandos, constituindo
Leia maisFundamentos de Arquiteturas de Computadores
Fundamentos de Arquiteturas de Computadores Cristina Boeres Instituto de Computação (UFF) Conversões Entre Bases Numéricas Material de Fernanda Passos (UFF) Conversões Entre Bases Numéricas FAC 1 / 42
Leia mais1 bases numéricas. capítulo
capítulo 1 bases numéricas Os números são representados no sistema decimal, mas os computadores utilizam o sistema binário. Embora empreguem símbolos distintos, os dois sistemas formam números a partir
Leia maisLinguagem Python. Processamento Estatístico da Linguagem Natural. Barra invertida em strings. Strings. Aspas triplas. Operações com Strings
Processamento Estatístico da Linguagem Natural Aula 7 Professora Bianca (Sala 302 Bloco E) bianca@ic.uff.br http://www.ic.uff.br/~bianca/peln/ Linguagem Python Introdução Características de Python Rodando
Leia maisConceitos de Linguagem de Programação - 2
Conceitos de Linguagem de Programação - 2 Arthur Jovita Guerra Thalles Santos Silva Universidade Estadual de Santa Cruz - Ilhéus, BA 1 de novembro de 2011 1 Revisão Natureza das linguagens de Programação
Leia maisEXERCÍCIOS: Estrutura Sequencial, IF (SE), ELSE (Senão)
EXERCÍCIOS: Estrutura Sequencial, IF (SE), ELSE (Senão) Exercício 1) Escreva um programa para ler um número o o Se o número é par, mostre na tela o texto "O número é par" Senão, mostre na tela o texto
Leia maisExercícios sobre algoritmos
Exercícios sobre algoritmos Exercícios envolvendo estruturas de decisão Fazer um algoritmo para: 1) Receber um número do usuário e mostrar se esse número é par ou não par 2) Receber 3 valores numéricos,
Leia maisEstruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches
CT-234 Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural Carlos Alberto Alonso Sanches CT-234 2) Algoritmos recursivos Indução matemática, recursão, recorrências Indução matemática Uma
Leia maisALGORITMOS E ESTRUTURA DE DADOS
ALGORITMOS E ESTRUTURA DE DADOS Algoritmos Tipos de Dados Prof. André Peixoto - Todo o trabalho realizado por um computador é baseado na manipulação dos dados/informações contidas em sua memória. Podemos
Leia maisRoteiro de trabalho para o 3o ano
Roteiro de trabalho para o 3o ano No volume do 3º ano estão assim organizados os conteúdos e as habilidades a serem desenvolvidos no decorrer do ano. LIÇÃO CONTEÚDO OBJETOS 1. Os números e sua história
Leia maisBAC004 Informática Teórica T2 Professora: Fabiana Costa Guedes Lista 05 Vetores e Matrizes Vetores
BAC004 Informática Teórica T2 Professora: Fabiana Costa Guedes Lista 05 Vetores e Matrizes Vetores 1- Faça um programa que preencha um vetor com seis elementos numéricos inteiros, calcule e mostre: a.
Leia maisEstrutura de Dados Conceitos Iniciais
Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos Iniciais Aula 04 DPEE 08 Estrutura de Dados para Automação Curso de Engenharia de Controle e Automação Universidade Federal de Santa Maria
Leia maisInteração com o usuário
Interação com o usuário E/S: entrada e saída Até agora, todos oscódigos desenvolvidos não se comunicaram com o usuário. Programador Dados necessários: programador ou por uma função randômica. Para mudar
Leia maisLISTA DE EXERCÍCIOS MÊS 04
São José dos Campos, 05 de Junho de 2008 Disciplina: CES 10 Introdução à Computação. Semestre 2008-2º Período Professor: Carlos Henrique Quartucci Forster Estagiária: Michelle de Oliveira Parreira Instituto
Leia mais