Escolar Documentos
Profissional Documentos
Cultura Documentos
Sumário
● O que é recursão
● Forma Recursiva
● Passos na recursão
○ Processamento
○ Chamada da função
Dividir para conquistar
○ Exemplos:
■ Travessia em árvores
Recursão
● Fatorial de um número:
○ 5! = 5*4*3*2*1
○ 4! = 4*3*2*1
○ 5! = 5*4!
○ Chamada recursiva
Exemplo
int main(){
int n;
scanf(“%d”, &n);
printf(“%d\n”, fatorial(n));
return 0;
}
Exemplo
int fatorial(int n){ int main(){
if(n == 1 || n == 0) int n;
return 1; scanf(“%d”, &n);
else printf(“%d\n”, fatorial(n));
return n*fatorial(n-1); return 0;
} }
Exemplo
int fatorial(int n){ int main(){
if(n == 1 || n == 0) int n;
return 1; scanf(“%d”, &n);
else printf(“%d\n”, fatorial(n));
return n*fatorial(n-1); return 0;
} }
● Condição de Parada
● Processamento
● Chamada recursiva
Exemplo
int fatorial(int n){ int main(){
if(n == 1 || n == 0) int n;
return 1; scanf(“%d”, &n);
else printf(“%d\n”, fatorial(n));
return n*fatorial(n-1); return 0;
} }
#include <stdio.h>
int main( void )
{
int i, j, n, fib;
scanf( "%i", &n );
fib = 0;
j = 1;
for(i=1; i<n; i++)
{
j = fib + j;
fib = j - fib;
}
printf(“%d\n”, fib);
return 0;
}
Fibonacci Recursivo
int fib( int x )
{
if( x <= 1 )
return x;
else
return fib(x-1) + fib(x-2);
}
int main(){
int n;
scanf(“%d”, &n);
printf(“%d\n”, fib(n));
return 0;
}
Explorando as possibilidades
● Multiplicação
● Fatorial
● Potência
Processamento
● Para n = 10
○ 10 / 2 = 5 (Resto 0)
○ 5 / 2 = 2 (Resto 1)
○ 2 /2 = 1 (Resto 0)
○ 1 / 2 = 0 (Resto 1)
○ A posição inicial
scanf("%d", &n);
for(i=0; i<n; i++){
for(j=0; j<n; j++){
scanf("%d", &lab[i][j]);
}
}
if(ok)
printf("Freedom\n");
else
printf("Trapped\n");
return 0;
}
Função de Movimento - Caso Base
int percorreLab(int ox, int oy, int dx, int dy, int tam, int
mat[41][41], int path[41][41]){
int ok;
else{
if(ox < tam && mat[ox+1][oy] == 0 && path[ox+1][oy] ==
0){
path[ox+1][oy] = 1;
ok = percorreLab(ox+1, oy, dx, dy, tam, mat, path);
if(ok) return 1;
path[ox+1][oy] = 0;
}
Testa o movimento para direita
return 0;
}
}
Dúvidas?
Problema 02
● Entrada Saída
int main(){
int iniciox, inicioy;
int finalx, finaly;
return 0;
}
Exercício 1
● Escreva uma função recursiva que determine se uma palavra é palíndroma ou
não.
○ Qual o caso base?
● Caso base?
● Passo indutivo?
Exercício 3
● Escreva uma função recursiva que dado um número n, gere todas as possíveis
combinações com as n primeiras letras do alfabeto.
○ Ex.: n = 3. Resposta: ABC, ACB, BAC, BCA, CAB, CBA
Exercício 4
● Escreva uma função recursiva que determine quantas vezes um dígito K ocorre
em um número natural N. Por exemplo, o dígito 2 ocorre 3 vezes em
762021192.
● Caso base?
○ Quando todos os digitos já foram examinados, ou seja, N = 0
Exercício 5
● Caso base?
○ Tamanho do array = 0. Soma é 0.
Exercício 6
● Caso base?
Exercício 6
● Caso base?
○ Tamanho do array restante é menor ou igual a 1
https://drive.google.com/drive/folders/1dWWUKibdDIM32024GSclxyC37Sa008m
B?usp=sharing
Material Complementar
Notion:
https://www.notion.so/3-Exemplos-e117f9324ec74be4a8d97ae725907354
Textos
● Apostila de Linguagem de Programação da UFMS (Fábio Martinez)
○ https://www.facom.ufms.br/~montera/progiv1.pdf - Aula 39
● Apostila de Linguagem de Programação da USP (Silvio Lago)
○ https://www.ime.usp.br/~slago/slago-C.pdf - Seção 4.4
● Slides de aula da UFU (André Backes)
○ http://www.facom.ufu.br/~backes/gsi002/Aula09-Funcoes.pdf - páginas 23 à 28
● Geek for Geeks - Vários exemplos de problemas resolvidos com recursão (nem todas as soluções são em C, o site é
em ingles)
○ https://www.geeksforgeeks.org/practice-questions-for-recursion-set-2/?ref=lbp
Material Complementar - Videos
● Me Salva! Programação em C
○ Introdução básica com exemplo: https://youtu.be/kS_VJYWeqIQ
● C Programming & Data Structures: Recursion in C - Série com 3 vídeos (~30 min no total), com uma boa explicação e
exemplos de recursão e seus tipos ( em inglês, by indian guy :), usem a legenda auto-gerada do youtube ):
○ Video 1 - Recursão em C: https://youtu.be/kepBmgvWNDw
○ Video 2 - Tipos de Recursão P1: https://youtu.be/t9whckmAEq0
○ Video 3 - Tipos de Recursão P2: https://youtu.be/HIt_GPuD7wk
● Vídeos do Prof. André Backes sobre recursão:
○ Definição e pontos básicos P1: https://youtu.be/T2gTc5u-i1o
○ Definição e pontos básicos P2: https://youtu.be/FH5lCr-RVWE
○ Cuidados com recursão: https://youtu.be/o3MPTEc3LD8