recursao em programação

Upload: jackjacara

Post on 13-Feb-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

  • 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