Escolar Documentos
Profissional Documentos
Cultura Documentos
Recursividade
Recursividade
quase sempre a forma recursiva apresenta uma codificao mais simples (reduzida). Por outro lado, implementaes interativas tendem a ser mais eficientes (performance) que as recursivas.
Recursividade
Sempre que h uma chamada de funo (recursiva ou no) os parmetros e as variveis locais so empilhadas na pilha de execuo. No caso da funo recursiva, para cada chamada criado um ambiente local prprio. (As variveis locais de chamadas recursivas so independentes entre si, como se fossem provenientes de funes diferentes).
Recursividade
Para se aplicar a recursividade deve-se pensar na definio recursiva do problema. Vejamos o caso do clculo do fatorial de um nmero n:
Pela
Recursividade - fatorial
Ento teremos a seguinte funo: /* calculo do fatorial funo recursiva */ int fatorial (int n) { if (n==0) return 1; else return n*fatorial(n-1); }
Recursividade - Potncia
Problema: Calcular um valor base (b) elevado a uma potncia inteira positiva (p). Definio: se p=0 b^p = 1 se p=1 b^p = b se p>=2 b^p = b*b^(p-1)
Recursividade - Potncia
/*calculo da potencia funo recursiva */ double potencia (float b, int p) { if (p==0) return 1; else return b*potencia(b, p-1); }
Recursividade - MDC
Definio recursiva para o MDC: mdc(a, b) = b se b divide a, ou seja a%b = 0 mdc(b, a%b) caso contrrio
Exerccios:
1.
Escreva uma funo recursiva que calcule a soma de todos os nmeros compreendidos entre os valores A e B passados por parmetro.
Escreva uma funo recursiva que calcule os juros compostos de um valor. Para isso o programa dever ler um valor inicial, o nmero de meses e a taxa de juros ao ms, e passar estes valores funo como parmetros. Escreva uma funo que faa a procura sequencial de um valor passado por parmetro num vetor tambm passado por parmetro. Escreva uma funo que faa a procura sequencial de um valor passado por parmetro numa lista simplesmente encadeada cujo ponteiro para o valor inicial foi passado por parmetro. Escreva uma verso recursiva do bubble sort.
2.
3.
4.
5.