7/23/2019 recursao em programao
1/36
20/05/2009 17:00Copyright@Arnaldo V Moura, Daniel F Ferber
1
Curso de C
Recurso
7/23/2019 recursao em programao
2/36
20/05/2009 17:00 2
Curso C - IC/UNICAMP
Recurso
Idia do procedimento recursivo
Exemplos
Roteiro:
>
7/23/2019 recursao em programao
3/36
20/05/2009 17:00 3
Recurso
Idia
7/23/2019 recursao em programao
4/36
20/05/2009 17:00 4
Curso C - IC/UNICAMP
Recurso
fat(n) = n x (n-1) x (n-2) x ... x 2 x 1
Calcular a funo fatorial
>
7/23/2019 recursao em programao
5/36
20/05/2009 17:00 5
Curso C - IC/UNICAMP
Recurso
fat(n) = n x (n-1) x (n-2) x ... x 2 x 1
fat(1) = 1
Calcular a funo fatorial
>
7/23/2019 recursao em programao
6/36
20/05/2009 17:00 6
Curso C - IC/UNICAMP
Recurso
fat(n) = n x (n-1) x (n-2) x ... x 2 x 1
fat(1) = 1fat(2) = 2 x 1 = 2
Calcular a funo fatorial
>
7/23/2019 recursao em programao
7/36
20/05/2009 17:00 7
Curso C - IC/UNICAMP
Recurso
fat(n) = n x (n-1) x (n-2) x ... x 2 x 1
fat(1) = 1fat(2) = 2 x 1 = 2fat(3) = 3 x 2 x 1 = 6
Calcular a funo fatorial
>
7/23/2019 recursao em programao
8/36
20/05/2009 17:00 8
Curso C - IC/UNICAMP
Recurso
fat(n) = n x (n-1) x (n-2) x ... x 2 x 1
fat(1) = 1fat(2) = 2 x 1 = 2fat(3) = 3 x 2 x 1 = 6fat(4) = 4 x 3 x 2 x 1 = 24
Calcular a funo fatorial
>
7/23/2019 recursao em programao
9/36
20/05/2009 17:00 9
Curso C - IC/UNICAMP
Recurso
dado um problema P, parametrizado por
um valor n.
Mtodo:
>
7/23/2019 recursao em programao
10/36
20/05/2009 17:00 10
Curso C - IC/UNICAMP
Recurso
dado um problema P, parametrizado por
um valor n.
No exemplo: P calcular a funo fatorial, fat n o parmetro da funo
Mtodo:
>
7/23/2019 recursao em programao
11/36
20/05/2009 17:00 11
Curso C - IC/UNICAMP
Recurso
Para alguns valores de n, sabemosdiretamente o valor de P(n): Usualmente so os primeiros (mais baixos)
valores de n.
Casos base:
>
7/23/2019 recursao em programao
12/36
20/05/2009 17:00 12
Curso C - IC/UNICAMP
Recurso
Para alguns valores de n, sabemosdiretamente o valor de P(n): Usualmente so os primeiros (mais baixos)
valores de n.
No exemplo:
fat(1) = 1, diretamente.
Casos base:
>
7/23/2019 recursao em programao
13/36
20/05/2009 17:00 13
Curso C - IC/UNICAMP
Recurso
Para um valor de n, diferente do casobase, assumimos que j temos prontosos valores de P(n-1), P(n-2), .....
Usamos esses valores para calcular P(n).
Passo indutivo:
>
7/23/2019 recursao em programao
14/36
20/05/2009 17:00 14
Curso C - IC/UNICAMP
Recurso
Para um valor de n, diferente do casobase, assumimos que j temos prontosos valores de P(n-1), P(n-2), .....
Usamos esses valores para calcular P(n). No exemplo:
fat(n) = n x (n-1) x ... x 2 x1 = n x fat(n-1)
Passo indutivo:
>
7/23/2019 recursao em programao
15/36
20/05/2009 17:00 15
Curso C - IC/UNICAMP
Recurso
fat(4) = 4 x fat(3)
Podemos calcular P(n) para qualquer n:
7/23/2019 recursao em programao
16/36
20/05/2009 17:00 16
Curso C - IC/UNICAMP
Recurso
fat(4) = 4 x fat(3)
Podemos calcular P(n) para qualquer n:
fat(3) = 3 x fat(2)
>Fat
7/23/2019 recursao em programao
17/36
20/05/2009 17:00 17
Curso C - IC/UNICAMP
Recurso
fat(4) = 4 x fat(3)
Podemos calcular P(n) para qualquer n:
fat(3) = 3 x fat(2)
fat(2) = 2 x fat(1)
>
7/23/2019 recursao em programao
18/36
20/05/2009 17:00 18
Curso C - IC/UNICAMP
Recurso
fat(4) = 4 x fat(3)
Podemos calcular P(n) para qualquer n:
fat(3) = 3 x fat(2)
fat(2) = 2 x fat(1)
fat(1) = 1
7/23/2019 recursao em programao
19/36
20/05/2009 17:00 19
Curso C - IC/UNICAMP
Recurso
fat(4) = 4 x fat(3)
Podemos calcular P(n) para qualquer n:
fat(3) = 3 x fat(2)
fat(2) = 2 x fat(1)
fat(1) = 1 base 1
>Fat
7/23/2019 recursao em programao
20/36
20/05/2009 17:00 20
Curso C - IC/UNICAMP
Recurso
fat(4) = 4 x fat(3)
Podemos calcular P(n) para qualquer n:
fat(3) = 3 x fat(2)
fat(2) = 2 x fat(1)
fat(1) = 1 base 1
induo2 x 1 = 2
>Fat
7/23/2019 recursao em programao
21/36
20/05/2009 17:00 21
Curso C - IC/UNICAMP
Recurso
fat(4) = 4 x fat(3)
Podemos calcular P(n) para qualquer n:
fat(3) = 3 x fat(2)
fat(2) = 2 x fat(1)
fat(1) = 1 base 1
induo
2 x 1 = 2
induo3 x 2 = 6
>Fat
7/23/2019 recursao em programao
22/36
20/05/2009 17:00 22
Curso C - IC/UNICAMP
Recurso
fat(4) = 4 x fat(3)
Podemos calcular P(n) para qualquer n:
fat(3) = 3 x fat(2)
fat(2) = 2 x fat(1)
fat(1) = 1 base 1
induo
2 x 1 = 2
induo3 x 2 = 6
induo4 x 6 = 24
>Fat
7/23/2019 recursao em programao
23/36
20/05/2009 17:00 23
Curso C - IC/UNICAMP
Recurso
Recurso deve tratar todos os casos de
valores do parmetro n:
>
base
C C IC/UNICAMP
7/23/2019 recursao em programao
24/36
20/05/2009 17:00 24
Curso C - IC/UNICAMP
Recurso
Recurso deve tratar todos os casos de
valores do parmetro n:
>
passo indutivobase
C C IC/UNICAMP
7/23/2019 recursao em programao
25/36
20/05/2009 17:00 25
Curso C - IC/UNICAMP
Recurso
Recurso deve tratar todos os casos de
valores do parmetro n:
>
passo indutivobase
. . . .
C C IC/UNICAMP
7/23/2019 recursao em programao
26/36
20/05/2009 17:00 26
Curso C - IC/UNICAMP
Recurso
Calcular pot(n) = 2^n, recursivamente, para n >= 0:
>Potencia
Curso C IC/UNICAMP
7/23/2019 recursao em programao
27/36
20/05/2009 17:00 27
Curso C - IC/UNICAMP
Recurso
Caso base:
Calcular pot(n) = 2^n, recursivamente, para n >= 0:
>Potencia
Curso C IC/UNICAMP
7/23/2019 recursao em programao
28/36
20/05/2009 17:00 28
Curso C - IC/UNICAMP
Recurso
Caso base: n = 0,
Calcular pot(n) = 2^n, recursivamente, para n >= 0:
>Potencia
Curso C - IC/UNICAMP
7/23/2019 recursao em programao
29/36
20/05/2009 17:00 29
Curso C - IC/UNICAMP
Recurso
Caso base: n = 0, e 2^0 = 1.
Calcular pot(n) = 2^n, recursivamente, para n >= 0:
>Potencia
Curso C - IC/UNICAMP
7/23/2019 recursao em programao
30/36
20/05/2009 17:00 30
Curso C IC/UNICAMP
Recurso
Caso base: n = 0, e 2^0 = 1.
Passo indutivo:
Calcular pot(n) = 2^n, recursivamente, para n >= 0:
>Potencia
Curso C - IC/UNICAMP
7/23/2019 recursao em programao
31/36
20/05/2009 17:00 31
Curso C IC/UNICAMP
Recurso
Caso base: n = 0, e 2^0 = 1.
Passo indutivo: n > 0,
Calcular pot(n) = 2^n, recursivamente, para n >= 0:
>Potencia
Curso C - IC/UNICAMP
7/23/2019 recursao em programao
32/36
20/05/2009 17:00 32
Curso C IC/UNICAMP
Recurso
Caso base: n = 0, e 2^0 = 1.
Passo indutivo: n > 0, ej sei calcular 2^(n-1), 2^(n-2), etc.
Calcular pot(n) = 2^n, recursivamente, para n >= 0:
>Potencia
Curso C - IC/UNICAMP
7/23/2019 recursao em programao
33/36
20/05/2009 17:00 33
Recurso
Caso base: n = 0, e 2^0 = 1.
Passo indutivo: n > 0, ej sei calcular 2^(n-1), 2^(n-2), etc. Para calcular 2^n:
Calcular pot(n) = 2^n, recursivamente, para n >= 0:
>Potencia
Curso C - IC/UNICAMP
7/23/2019 recursao em programao
34/36
20/05/2009 17:00 34
Recurso
Caso base: n = 0, e 2^0 = 1.
Passo indutivo: n > 0, ej sei calcular 2^(n-1), 2^(n-2), etc. Para calcular 2^n:
calculamos z = 2^(n-1), recursivamente
Calcular pot(n) = 2^n, recursivamente, para n >= 0:
>Potencia
Curso C - IC/UNICAMP
7/23/2019 recursao em programao
35/36
20/05/2009 17:00 35
Recurso
Caso base: n = 0, e 2^0 = 1.
Passo indutivo: n > 0, ej sei calcular 2^(n-1), 2^(n-2), etc. Para calcular 2^n:
calculamos z = 2^(n-1), recursivamente calculamos 2^n = 2*z.
Calcular pot(n) = 2^n, recursivamente, para n >= 0:
>Potencia
7/23/2019 recursao em programao
36/36
20/05/2009 17:00 36
Curso de C
PotBaseGen Hex2dec MDC Hanoi Newton Fibo Fibo2
Merge Quick BuscaBin
Transposta FormulaInfixa Rainhas