Escolar Documentos
Profissional Documentos
Cultura Documentos
Recursão
• Exemplo: Fatorial.
1 se n = 0.
n! :=
n(n − 1)! se n > 0.
• Esta idéia nos permite definir algoritmos que são recursivos, isto
é, algoritmos que são definidos em termos de si mesmos.
1
MC 102 – Algoritmos e Programação de Computadores
2
MC 102 – Algoritmos e Programação de Computadores
int fatorial(int n) {
if (n == 0) return 1;
else
return fatorial(n-1) * n;
}
2
MC 102 – Algoritmos e Programação de Computadores
Observações importantes
3
MC 102 – Algoritmos e Programação de Computadores
Observações importantes
#include <stdio.h>
#define MAX 100
int maximo( int v[ ], int n)
{
int i;
if ( n > 1) {
i = maximo(v, n-1);
if (v[n-1] > v[i])
i = n-1;
}
else i = 0;
return i;
}
4
MC 102 – Algoritmos e Programação de Computadores
• gcd(4032, 1272) = 24
– 4032 = 26 × 32 × 71 ;
– 1272 = 23 × 31 × 531 ;
– gcd = 23 × 31 = 24.
5
MC 102 – Algoritmos e Programação de Computadores
• gcd(4032, 1272) = 24
– 4032 = 26 × 32 × 71 ;
– 1272 = 23 × 31 × 531 ;
– gcd = 23 × 31 = 24.
5
MC 102 – Algoritmos e Programação de Computadores
• gcd(4032, 1272) = 24
– 4032 = 26 × 32 × 71 ;
– 1272 = 23 × 31 × 531 ;
– gcd = 23 × 31 = 24.
5
MC 102 – Algoritmos e Programação de Computadores
• gcd(4032, 1272) = 24
– 4032 = 26 × 32 × 71 ;
– 1272 = 23 × 31 × 531 ;
– gcd = 23 × 31 = 24.
5
MC 102 – Algoritmos e Programação de Computadores
• gcd(4032, 1272) = 24
– 4032 = 26 × 32 × 71 ;
– 1272 = 23 × 31 × 531 ;
– gcd = 23 × 31 = 24.
5
MC 102 – Algoritmos e Programação de Computadores
• gcd(4032, 1272) = 24
– 4032 = 26 × 32 × 71 ;
– 1272 = 23 × 31 × 531 ;
– gcd = 23 × 31 = 24.
5
MC 102 – Algoritmos e Programação de Computadores
• gcd(4032, 1272) = 24
– 4032 = 26 × 32 × 71 ;
– 1272 = 23 × 31 × 531 ;
– gcd = 23 × 31 = 24.
5
MC 102 – Algoritmos e Programação de Computadores
x se y = 0.
gcd(x, y) :=
gcd(y, x%y) caso contrário.
#include <stdio.h>
6
MC 102 – Algoritmos e Programação de Computadores
0 se n = 0.
Fn := 1 se n = 1.
Fn−1 + Fn−2 se n ≥ 2.
7
MC 102 – Algoritmos e Programação de Computadores
0 se n = 0.
Fn := 1 se n = 1.
Fn−1 + Fn−2 se n ≥ 2.
Fib (n)
1. Se n ≤ 1 retorne n;
2. Senão retorne fib(n − 1) + fib(n − 2)
7
MC 102 – Algoritmos e Programação de Computadores
Fib (n)
1. Se n ≤ 1 retorne n;
2. Senão retorne fib(n − 1) + fib(n − 2)
f ib(3)
f ib(2)
f ib(1)
f ib(0)
f ib(1)
8
MC 102 – Algoritmos e Programação de Computadores
9
MC 102 – Algoritmos e Programação de Computadores
Torres de Hanoi
10
MC 102 – Algoritmos e Programação de Computadores
Divisão e conquista
11
MC 102 – Algoritmos e Programação de Computadores
Exponenciação rápida
12
MC 102 – Algoritmos e Programação de Computadores
Exponenciação rápida
if (n > 0) {
aux = FastExp(n/2, x);
aux = aux * aux;
if (n % 2) aux = aux * x;
}
return aux;
}
13
MC 102 – Algoritmos e Programação de Computadores
MergeSort
14
MC 102 – Algoritmos e Programação de Computadores
Mergesort
15
MC 102 – Algoritmos e Programação de Computadores
Merge
QuickSort
17
MC 102 – Algoritmos e Programação de Computadores
Quicksort
18
MC 102 – Algoritmos e Programação de Computadores
Partition
Recursão indireta
20
MC 102 – Algoritmos e Programação de Computadores
#include <stdio.h>
#include <math.h>
int impar(int);
int par(int);
int main (){
int n;
scanf(”%d”, &n);
n = abs(n);
if (impar(n)) printf(‘‘Ímpar!\n”);
else printf(‘‘Par!\n”);
return 0;
}
int impar(int n) {
if (n==0) return 0;
else return par(n-1);
}
int par(int n){
if (n==0) return 1;
else return impar(n-1);
}
21